Flex mx:SWFLoader加载不正确的SWF文件

时间:2015-03-13 16:46:33

标签: actionscript-3 flash flex actionscript swfloader

我是Flex的新手,我遇到一个问题,我有一个主要的Flex程序(让我们称之为“Parent.swf”)试图通过SWFLoader类/组件加载另一个Flex应用程序(Child.swf)。 环境是FlashDevelop上的Flex 4.6。

调用似乎正常工作(即没有返回IO或沙箱错误),只是它似乎将“Parent.swf”重新加载到SWFLoader而不是“Child.swf”。

例如,我有Parent.swf包含:

<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>

....

子swf包含:

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

上面的跟踪(即“STARTING UP!”)在Child.swf的加载上重复,然后再次尝试加载Child.swf失败,因为该调用的工作目录现在位于“plugins”目录中。 所以似乎知道该文件存在并加载它,但不知何故在Parent.swf中交换它的顶部。 请注意,如果我直接执行Child.swf,我就能够验证它是否符合预期(即带有单个标签的flex应用程序,说“我是一个插件!”)。

我还尝试了各种其他方法,例如通过代码实例化SWFLoader,但同样的问题也出现了。我甚至试图切换到模块,但也有相同的行为。 无论是在本地运行还是通过Web服务器运行都会失败。

有没有人知道如何发生这种情况?有没有办法让parent.swf的main.mxml重写Child.swf? (对不起,这篇文章)

2 个答案:

答案 0 :(得分:0)

我需要完整的代码来发现。但我可以提出两个想法:

  1. 检查你的onPluginLoaded函数,它可以由Parent而不是Child调用

  2. 检查您是否重复了任何可以生成交叉引用的类或对象名称。例如,Parent和Child都使用MyScrollbarClass。由于此类首先由Parent加载,因此在Child中加载时会创建一个新名称,例如MyScrollbarClass_1

答案 1 :(得分:0)

在加载的应用程序中,mxml文件的名称必须不同