Flex Full Screen – Passer une application Flex en plein écran
Flash Player 9 ( à partir de la version 9.0.28.0 et 10) donne la possibilité d'afficher un SWF en plein écran. Ce type d'affichage peut se révéler pratique, voire primordial dans le cas d'applications vidéos (comme le player Youtube par exemple). Le passage en plein écran se fait grâce à plusieurs instructions en ActionScript ainsi qu'une modification des tags <object> et <embed> qui servent à intégrer votre application dans une page HTML.
Notez qu'une fois en plein écran, vous ne pourrez plus écrire dans les champs texte de votre application. C'est une sécurité pour la prévention d'attaque de phishing qu'Adobe a mis en place. Par contre, une application Adobe Air permet de passer en plein écran tout en laissant les champs texte éditables.
Passer en Plein Ecran avec ActionScript
Pour pouvoir faire certaines modifications (cacher/afficher/resize des éléments par exemple) au moment du passage en Full Screen, on va ajouter un handler qui sera appelé à chaque fois que l'état d'affichage de notre stage est modifié.
Attention, vous ne pouvez pas ajouter ce handler tant que votre application n'est pas complètement initialisée. Il ne faut donc pas l'ajouter lors du creationComplete mais lors de l'évènement applicationComplete (accessible sur <mx:Application>).
Si vous tentez d'ajouter ce handler sur le creationComplete, vous aurez une RTE (RunTime Error) suivante:
TypeError: Error #1009: Cannot access a property or method of a null object reference. at main/init() at main/___main_Application1_creationComplete() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at mx.core::UIComponent/dispatchEvent() at mx.core::UIComponent/set initialized() at mx.managers::LayoutManager/doPhasedInstantiation() at Function/http://adobe.com/AS3/2006/builtin::apply() at mx.core::UIComponent/callLaterDispatcher2() at mx.core::UIComponent/callLaterDispatcher()
En effet, la propriété stage n'est pas encore initialisée au moment de l'évènement creationComplete.
Pour passer en mode plein écran, on va simplement modifier la valeur de la propriété displayState de stage. Cette propriété displayState peut prendre deux valeurs que vous pouvez trouver comme constante static dans flash.display.StageDisplayState:
- StageDisplayState.FULL_SCREEN : mode plein écran (full screen)
- StageDisplayState.NORMAL: mode normal (par défaut)
Voici une mini-application Flex permettant de passer en fullScreen:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="init()" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import flash.display.StageDisplayState;
private function init():void {
// au moment du applicationComplete, ajouter le handler
stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenHandler);
dispState = stage.displayState;
}
private function fullScreenHandler(evt:FullScreenEvent):void {
dispState = stage.displayState + " (fullScreen=" + evt.fullScreen.toString() + ")";
if (evt.fullScreen) {
// traitement spécifique à faire lors du passage en plein écran
} else {
// traitement spécifique à faire lors du retour à la normale
}
}
private function toggleFullScreen():void {
try {
switch (stage.displayState) {
case StageDisplayState.FULL_SCREEN:
// si on est déjà en FULL SCREEN, on se remet en normal
stage.displayState = StageDisplayState.NORMAL;
break;
default:
// si on est pas en full screen, on passe en plein écran
stage.displayState = StageDisplayState.FULL_SCREEN;
break;
}
} catch (err:SecurityError) {
// ignore
}
}
]]>
</mx:Script>
<mx:String id="dispState" />
<mx:Label text="width={Application.application.width}" />
<mx:Label text="height={Application.application.height}" />
<mx:Label text="displayState={dispState}" />
<mx:Button label="Activer/désactiver le Full Screen" click="toggleFullScreen()" />
</mx:Application>
Flex Source Code Download: Télécharger le code source complet de l'application
Si vous essayer dans votre application Flex, sans avoir lu la fin de ce tutorial, vous aurez sûrement l'erreur de type SecurityError : SecurityError: Error #2152: Le mode plein écran n’est pas autorisé.
Cette erreur se produit car vous n'avez pas modifié les tags de fichier HTML dans lequel se trouve votre SWF.
Modifier les tags HTML servant à intégrer le SWF
Si vous utilisez Flex Builder, vous pouvez directement modifier le template qui génère une page HTML de base. Avec Flex Builder 3, ce template se trouve dans le dossier html-template de votre projet et se nomme index.template.html. Au niveau des fonctions JavaScript qui servent à intégrer le SWF, rajoutez:
AC_FL_RunContent(
"src", "main",
"width", "100%",
"height", "100%",
"align", "middle",
"id", "main",
"quality", "high",
"bgcolor", "#869ca7",
"name", "main",
"allowScriptAccess","sameDomain",
"type", "application/x-shockwave-flash",
"pluginspage", "http://www.adobe.com/go/getflashplayer",
"allowFullScreen", "true"
);
Si vous n'utilisez pas le template HTML généré par FB3, vous pouvez directement modifier les tags HTML <object> et <embed> comme ceci:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="main" width="100%" height="100%"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="main.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<embed src="main.swf" quality="high" bgcolor="#869ca7"
width="100%" height="100%" name="main" align="middle"
play="true"
loop="false"
quality="high"
allowScriptAccess="sameDomain"
allowFullScreen="true"
type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer">
</embed>
</object>
Autoriser le plein écran lors d'une intégration avec SWFObject (et plug-in WordPress wp-swfobject)
Pour ceux que cela intéresse, qui ont WordPress avec le plug-in wp-swfobject permettant d'intégrer des SWF avec SWFObject, il suffit de modifier le plug-in. Dans la fonction wpswfObject, vous verrez que l'on écrit tous ces paramètres avec des addParam(). Il suffit de rajouter le paramètre allowFullScreen à cet endroit:
...
$writeswf.= "so.addParam(\"quality\", \"".$swf_config['wp_swf_quality']."\");\n";
$writeswf.= "so.addParam(\"allowFullScreen\", \"true\");\n";
if ($match[4] != "") {
...
Pour information, il y a des bugs connus avec ce passage en plein écran, surtout pour les personnes étant sur plate-forme Mac. Au programme, des pertes de focus et des problèmes de scale éventuels qui peuvent arriver
Articles similaires
- Flex Full Screen – SecurityError: Error #2152: Le mode plein écran n’est pas autorisé [Résolu]
- Flash sur Android – Gérer les contraintes de taille, scale, full screen, rotation…
- Flex Tips – Error #2044: ErrorEvent non pris en charge : text=Error #3702: Context3D non disponible [Résolu]
- AIR pour Android – Mise à jour HTC Desire en Android 2.2 (FroYo) avec support de Flash Player et Adobe Air
- AIR pour Android – Détecter une sortie d'application avec Event.ACTIVATE / Event.DEACTIVATE






18 mars 2009
je suis sous un xp avec flash v 10 .
Apparemment stage.displayState = StageDisplayState.FULL_SCREEN;
fais planter adobe. En Air adobe plante .
Cet page par exemple fait planter firfox et ie si je clic sur le bouton de l'exemple plus haut .
Sur une autre machine ( même xp même version de flash ça marche.
Quelqu'un peut il m'aidé ?
Jaf
18 mars 2009
Bonjour, je viens de tester avec Flash Player 10, aucun problème (IE/Vista pour le test).
Essayez de desinstaller votre FP avec le desinstallateur Adobe et de le réinstaller
Fabien
3 avril 2009
Lorsque j'exécute mon projet avec le code ci-dessous et que je passe en mode plein écran, mes champs () ne sont plus disponible : Je ne peux plus rien saisir dedans. En revenant en mode normal c'est ok !!
3 avril 2009
C'est normal, il faut lire l'article (à peu près à la 10e ligne)

Fabien
3 avril 2009
Je suis vraiment désolé d'être aussi analphabète ! ! ! Je vais me retourner vers du javascript...
Merci
5 juillet 2011
Bonjour,
Je suis en tr1 d'écrire une application flex pour mon boss et je manque d'inspiration pour le menu (je suis novice). Si vous avez des exemples de menu (simples et ergonomiques) à me proposer je serai très ravis. Aussi quand mon boss se connecte, je le marque comme étant connecté dans la BD ce qui fais qu'il dois forcement cliquer sur déconnecté avant de quitté l'appli. Je voudrais savoir comment je peut gérer la connexion/déconnexion (l'appli en question est de type web) merci d'avance .
5 juillet 2011
Salut,
Pour le menu, tu as le composant Menu et MenuBar. Simple et ergonomique. Après, tu peu pres tout faire en Flex mais pas de generateur de creativité dsl. Pour ton systeme de deco, tu peux utiliser les mecanismes classiques comme d'enregistrer la date de connexion en BDD et de faire en consequence.
Fabien