我有一个主要项目,我想加载另一个项目的SWF:
//loader code in Main class of main project
var url:URLRequest = new URLRequest("../src/components/TextTool.swf");
var ttWrapper:UIComponent = new UIComponent();
var ldr:SWFLoader = new SWFLoader();
var context:LoaderContext = new LoaderContext();
if (Security.sandboxType == Security.LOCAL_TRUSTED) {
context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
} ldr.source = "../src/components/TextTool.swf";
ldr.loaderContext = context;
ldr.addEventListener(Event.COMPLETE, onLoadComplete);
ldr.load();
can.addElement(ldr);
这是第二个项目的主要类的代码:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:stark="stark.*" name="textModule" >
<stark:TextTool name="myTF" id="myTF"></stark:TextTool>
</s:Application>
现在,这两个项目都包含一个接口文件:IMODULE,具有相同的代码,以及第二个项目的元素(正在加载的一个项目),这是我自定义类" TextTool"的实例,该实例扩展了S:组并实现Imodule:
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="400"
xmlns:com="src"
height="130" creationComplete = "initText()" implements="IModule"></s:Group>
现在,一旦我加载了SWF,我想访问具有" mytf"的ID和ID:
的ID//Code in the main class of the main project
trace(getQualifiedClassName(mySwf.getChildByName('textModule')['myTF']));
trace(mySwf.getChildByName('textModule')['myTF'] is IModule);
//output:
//stark::TextTool
//false
正如我上面提到的,我在两个项目中都有接口,相同的代码,相对于主类的路径相同,MyTF确实扩展了IMODULE。加载SWF后,我得到了正确的元素,但是在验证是否实现Imodule时,我仍然会出现错误。为什么?
您正在测试Application
实施
trace(mySwf.getChildByName('textModule') is IModule);
我认为您忘了添加['myTF']
trace(mySwf.getChildByName('textModule')['myTF'] is IModule);
您都将两个加载到不同的应用程序中,因此首先要赢得哪个加载。尝试将它们加载到同一应用程序域中。