主swf与被加载swf的通信问题
发布时间:2020-12-15 07:03:04 所属栏目:百科 来源:网络整理
导读:原文地址: 主swf与被加载swf的通信问题 作者: 北辰 AS3中,swf加载 另一个swf时,两者之间的通信问题跟被加载到的应用程序域有很大关系。应用程序域大概有四种,这里直接引用Flash帮助文档的说明: 加载器的 ? ApplicationDomain ? 的子级。默认值。 可以
原文地址:主swf与被加载swf的通信问题
作者:北辰
AS3中,swf加载
另一个swf时,两者之间的通信问题跟被加载到的应用程序域有很大关系。应用程序域大概有四种,这里直接引用Flash帮助文档的说明:
1,子swf访问父swf文档类方法: 在子swf被加载完成后,一般都是采用同一种方式:this.parent.parent.函数名()进行访问; 2,子swf访问父 swf中的类: 很多人认为子swf是不能获得父swf的类,其实是可以的。大概思路是:获取父swf的应用程序域,然后通过getDefinition方法。 而1和2,要在子swf被加载完成而且父swf也初始化完毕后调用才正确,否则有可能出现错误。这里一个比较好的方法是在父swf中,当子swf被加载完成时调用子swf的两个方法,分别将父swf本身的引用和父swf应用程序域的引用传给子swf。示例代码: var swfTarget = event.target.content; swfTarget.traceFromLoaded(); swfTarget.getParent(this);//getParent为子swf的一个方法 swfTarget.getParentDomain(ApplicationDomain.currentDomain);//getParentDomain 为子swf的一个方法 其中getParent与getParentDomain方法实现为: private var _parentObj:Object; private var _parentDomain:ApplicationDomain; public function getParent(parentObj:Object):void { _parentObj = parentObj; } public function getParentDomain(parentDomain:ApplicationDomain):void { _parentDomain = parentDomain; } 3,父swf访问子swf文档类方法: 用Loader的属性content得到对子swf的引用,然后就可以调用其方法了。示例代码: var swfTarget = event.target.content; swfTarget.函数名(); 4,父swf访问子swf中的类: a,不管是上述的哪种域环境,通用的一种方法是,获得子swf的域引用,然后用getDefinition获得要用到的类引用,示例代码: //LoaderInfo对象承载载入swf文件的信息 var swfTarget:LoaderInfo=event.target as LoaderInfo; //swfTarget的只读属性applicationDomain返回一个ApplicationDomain //创建被加载swf的应用程序域 var appDomain:ApplicationDomain=swfTarget.applicationDomain as ApplicationDomain; //getDefinition方法从指定的应用程序域获取一个公共定义。 //该定义可以是一个类、一个命名空间或一个函数的定义。 //其中"myClass"为被加载swf文件里影片剪辑链接属性里的类 var MCClass:Class=appDomain.getDefinition("MyClass") as Class; //创建MCClass实例,并返回影片剪辑对象 var myMCA:MovieClip=(new MCClass()) as MovieClip; var myMCB:MovieClip=(new MCClass()) as MovieClip; b,如果子swf跟父swf在同一应用程序域中,则可直接通过getDefinitionByName()方法对子swf的类进行调用,其他域则不行; 总结:getDefinition是子父swf相互调用对方类的通用方法,但其中上面文档中的红色字体的,我实验了下,应该是不可以的。编译都报错, 怎么 可行?是文档用词不恰当还是我方法不对
?
(本文来自网上转载)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |