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

Flex mx:SWFLoader Loads Incorrect SWF File

我是 Flex 的新手,我遇到了一个问题,我有一个主要的 Flex 程序(我们称之为 "Parent.swf")试图通过 SWFLoader 加载另一个 Flex 应用程序(Child.swf) class/component。 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 应用程序 "I'M A PLUGIN!")。

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

有人知道这是怎么发生的吗? Parent.swf 的 main.mxml 是否有某种方式覆盖 Child.swf? (对不起作文)

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

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

  2. 检查是否有任何 class 或重复的对象名称可以生成交叉引用。例如,Parent 和 Child 都使用 MyScrollbarClass。由于这个class首先被Parent加载,所以在Child加载时会创建一个新的名字,比如MyScrollbarClass_1

mxml 文件在加载的应用程序中必须以不同的方式命名