2010-05-06 5 views
0

Je charge en ActionScript un fichier swf. Jusqu'à présent, aucun problème, mais je n'ai pas trouvé un moyen d'accéder à l'une de ses fonctions, la meilleure chose serait si je pouvais accéder à la fonction principale dans la partie mxml du swf.Flex 3 (Action Script): Comment accéder à une fonction à partir d'un fichier swf chargé?

Voici le code du fichier principal MXML qui appartient à la swf qui doit charger et accéder à un autre swf:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="basket();"> 

    <mx:Script> 
     <![CDATA[ 
      import mx.controls.SWFLoader; 

      private function basket(): void 
      { 
       var swfLoader: SWFLoader = new SWFLoader(); 
       swfLoader.addEventListener(Event.COMPLETE, handleSWFLoaded); 

       try { 
        swfLoader.load("../../data/InternalSWF.swf"); 
       } catch (error: Error) { 
        trace("Couldn't load file !"); 
       } 
      } 

      private function handleSWFLoaded(event: Event): void 
      { 
       var swfApp:* = event.target.content; 

       // This both ways don't work... 

       //if (swfApp.hasOwnProperty("initApp")) { 
       // var initApp:Function = (swfApp["initApp"] as Function); 
       // initApp(); 
       //} 

       // swfApp.initApp(); 
      } 
     ]]> 
    </mx:Script> 

    <mx:Text id="output" width="100%" textAlign="center" /> 

</mx:Application> 

Le if "if (swfApp.hasOwnProperty (" initApp ")) {"n'est jamais vrai et l'appel" swfApp.initApp() "indique que cette fonction n'existe pas.

Dans la version originale, j'ai ajouté des écouteurs d'événement pour HTTPStatusEvent.HTTP_STATUS, IOErrorEvent.IO_ERROR et SecurityErrorEvent.SECURITY_ERROR. Mais à l'exception de HTTP_STATUS = 0, aucun d'entre eux n'est appelé.

Est-ce que l'idée est de savoir comment j'essaye de faire ça?

Répondre

0

trouvé une solution quelques jours après le poste :)

Après le swf chargé, on peut utiliser le code suivant pour accéder aux fonctions internes (dans cet exemple initApp()):

public function getInnerSWF():Object 
{ 
    var sysMan:SystemManager = swfLoader.content as SystemManager;<br> 
     return sysMan.document; 
} 

getInnerSWF().initApp(); 
Questions connexes