2015-03-13 2 views
0

Je suis assez nouveau pour Flex et j'ai un problème où j'ai un programme principal Flex (appelé "Parent.swf") essayant de charger une autre application Flex (Child.swf) via la classe/composant SWFLoader. L'environnement est Flex 4.6 sur FlashDevelop. L'appel semble fonctionner correctement (c'est-à-dire qu'aucune erreur d'ES ou de sandbox n'est renvoyée), seulement qu'il semble recharger le fichier "Parent.swf" dans le SWFLoader au lieu de "Child.swf".Flex mx: SWFLoader charge le fichier SWF incorrect

Par exemple, j'ai l'Parent.swf contenant:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" 
      initialize="doStartup()" 
      width="1024" height="768"> 

... 

<fx:Script> 

    <![CDATA[ 

     private function doStartup():void 
     { 
      trace("STARTING UP!"); 
     } 

     .... 

    ]]> 

</fx:Script> 

<mx:VBox top="10" left="10" width="100%" horizontalAlign="center"> 
    <mx:Label text="I'M A LOADER!" /> 
</mx:VBox> 
<mx:VBox top="10" left="10" width="100%" horizontalAlign="center"> 
    <mx:SWFLoader 
        id="pluginLoader" 
        source="plugins/Child.swf" 

        autoLoad="true" 
        height="400" width="400" 
        complete="onPluginLoaded(event);" 
        ioError="onPluginLoadError(event);" 
        securityError="onPluginSecurityError(event);" 

        httpStatus="onHttpStatus(event);" 
        init="onInit(event);" 
        open="onOpen(event);" 
        progress="onProgress(event);" 
        unload="onUnload(event);" 
        /> 
</mx:VBox> 

.... 

Le swf enfant contient:

.... 
<mx:Label text="I'M A PLUGIN!" /> 
.... 

La trace ci-dessus est répété sur la charge (par exemple "UP DE DÉPART!") de Child.swf, suivi d'une autre tentative de chargement de Child.swf qui échoue car le répertoire de travail de l'appel se trouve maintenant dans le répertoire "plugins". Donc, il semble savoir que le fichier existe et le charger, mais d'une certaine manière swaps dans Parent.swf sur le dessus de celui-ci. Notez que si j'exécute Child.swf directement, je peux vérifier que c'est bien ce que j'attends (c'est-à-dire une application flexible avec une seule étiquette disant "I'm A PLUGIN!").

J'ai également essayé diverses autres approches telles que l'instanciation d'un SWFLoader via le code mais le même problème se produit. J'ai même essayé de passer aux modules mais j'ai eu le même comportement là aussi. Il échoue s'il est exécuté localement ou exécuté via un serveur Web.

Est-ce que quelqu'un a une idée de comment cela pourrait se produire? Est-il possible que le fichier main.mxml de Parent.swf surcharge Child.swf? (Désolé pour l'essai)

Répondre

0

fichier MXML doit être nommé différemment dans les applications chargées

0

J'ai besoin du code complet pour la découverte. Mais je peux suggérer deux idées:

  1. Vérifiez votre fonction onPluginLoaded, il peut être appelé par des parents au lieu de l'enfant

  2. Vérifiez si vous n'avez pas un nom de classe ou d'un objet répété que peut généré une référence croisée. Par exemple, Parent et Child utilisent MyScrollbarClass. Comme cette classe a d'abord été chargé par le parent, il va créer un nouveau nom lorsque la charge dans l'enfance, comme MyScrollbarClass_1

+0

Gaah, je me sens comme un idiot. C'était en quelque sorte lié à votre deuxième point là-bas ... les deux applications utilisaient main comme nom de fichier mxml. Si je change l'un d'entre eux à un nom différent alors tout fonctionne bien! À votre santé Harrison. – user4667964