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?
(对不起作文)
我需要完整的代码来发现。但我可以提出两个想法:
检查你的onPluginLoaded函数,它可以被Parent而不是Child调用
检查是否有任何 class 或重复的对象名称可以生成交叉引用。例如,Parent 和 Child 都使用 MyScrollbarClass。由于这个class首先被Parent加载,所以在Child加载时会创建一个新的名字,比如MyScrollbarClass_1
mxml 文件在加载的应用程序中必须以不同的方式命名
我是 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? (对不起作文)
我需要完整的代码来发现。但我可以提出两个想法:
检查你的onPluginLoaded函数,它可以被Parent而不是Child调用
检查是否有任何 class 或重复的对象名称可以生成交叉引用。例如,Parent 和 Child 都使用 MyScrollbarClass。由于这个class首先被Parent加载,所以在Child加载时会创建一个新的名字,比如MyScrollbarClass_1
mxml 文件在加载的应用程序中必须以不同的方式命名