加载外部swf时as3 / flex接口不兼容

时间:2012-10-19 12:55:18

标签: actionscript-3 flex flash external

我有一个主项目,我想将另一个项目的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);

这是第二个项目的Main类的代码:

<?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的TextTool实例:

//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时我仍然会得到错误。 为什么呢?

2 个答案:

答案 0 :(得分:0)

您正在测试Application实施

trace(mySwf.getChildByName('textModule') is IModule);

我想你忘了添加['myTF']

trace(mySwf.getChildByName('textModule')['myTF'] is IModule);

答案 1 :(得分:0)

您将两者加载到不同的ApplicationDomain中,因此无论哪个加载首先获胜。尝试将它们加载到同一个ApplicationDomain中。