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