调用加载进来的SWF方法问题:

73 views
Skip to first unread message

8088

unread,
May 5, 2009, 10:04:11 PM5/5/09
to 一个AS3讨论组
昨天碰到一个奇怪的问题:

加载进来的SWF,死活调不了他的函数. 后来我写个空接口,主SWF实现这个接口,便能调用了,

很奇怪这个是为什么? 有什么原理?

更奇怪的现象是,当我还原代码 删掉接口,居然也能调用了,问题没法重现,现在找原因也没法找了.

这到底怎么回事? 哪位朋友遇到过?

Aw Guo

unread,
May 5, 2009, 10:06:17 PM5/5/09
to as3-dis...@googlegroups.com
我个人建议你load进来之后保存一份子swf的applicationDomain的引用。然后统一调用。

不过我还没怎么用这种方式直接调用过子swf的方法,只是加载显示元素的时候用到一些。

Best,


Blog in Chinese (Simplified)
http://www.awflasher.com/blog/

Blog in English
http://www.ifgogo.com/

Twitter
http://twitter.com/awflasher


2009/5/6 8088 <flash...@gmail.com>

Kenshin.L

unread,
May 5, 2009, 10:15:29 PM5/5/09
to as3-dis...@googlegroups.com
请问你是如何加载swf的?使用loader进行加载的吗?例如Image 或者 SWFLoader控件?

如果是的话,你可以监听它们的Event.COMPLETE,当加载完毕后,使用它们自身的content来获取加载内容,如果被加载的swf也是使用Flex生成的,那么可以使用SystemManager( xxx.content )里面的document来获取被加载swf里面的function,或者监听被加载程序中的某些event等操作。

当然,如果被加载的swf非flex生成的话,则另当别论。

希望可以对你有所帮助。:)


++++++++++++++++++++
BLOG:http://www.k-zone.cn
RXNA:http://rxna.cn
++++++++++++++++++++


2009/5/6 8088 <flash...@gmail.com>

8088

unread,
May 5, 2009, 10:43:47 PM5/5/09
to 一个AS3讨论组
AW 说的保存一份子swf的applicationDomain的引用 是什么意思,我没有听过,能否详细指教一下?

Kenshin.L 我是用loader加载的 有监听 再收到Event.INIT事件后 用content调用被加载SWF方法,开始总报错

Kenshin.L

unread,
May 5, 2009, 10:57:42 PM5/5/09
to as3-dis...@googlegroups.com
你应该监听 Event.COMPLETE,而非 Event.INIT,因为只有swf被完全加载进来后才会获取content的内容。

同时当监听到Event.COMPLETE后,也不是马上就可以得到它的content的,这个地方有的时候需要一些技巧,例如利用timer进行延时或者使用callLater,等下一次刷新后,才进行某些处理。

goog luck :)

++++++++++++++++++++
BLOG:http://www.k-zone.cn
RXNA:http://rxna.cn
++++++++++++++++++++


2009/5/6 8088 <flash...@gmail.com>
AW 说的保存一份子swf的applicationDomain的引用 是什么意思,我没有听过,能否详细指教一下?

Aw Guo

unread,
May 6, 2009, 2:13:05 AM5/6/09
to as3-dis...@googlegroups.com
假如你在a.swf的Library里面有一个元件,绑定输出类名称(linkage name)为MyClassName
那么你在loader载入完成后可以通过:
loader.contentLoaderInfo.applicationDomain 拿到 这个swf的 applicationdomain
你要找那个MyClassName就通过:
applicationDomain.getDefinition("MyClassName")
的方式来找,例如:

var myClass:class = loader.contentLoaderInfo.applicationDomain.getDefinition("MyClassName");
var myInstance:* = new myClass();


2009/5/6 8088 <flash...@gmail.com>
AW 说的保存一份子swf的applicationDomain的引用 是什么意思,我没有听过,能否详细指教一下?

Aw Guo

unread,
May 6, 2009, 2:17:43 AM5/6/09
to as3-dis...@googlegroups.com
Kenshin说的不错,Event.INIT和原来MovieClipLoader的那个init不一样了,我记得那个时候是要用init来初始化loaded assets的(不知道我记得对不对)

2009/5/6 8088 <flash...@gmail.com>
AW 说的保存一份子swf的applicationDomain的引用 是什么意思,我没有听过,能否详细指教一下?

8088

unread,
May 6, 2009, 2:58:19 AM5/6/09
to 一个AS3讨论组
好,记下. 多谢两位解答;)

Kenshin.L

unread,
May 6, 2009, 3:18:35 AM5/6/09
to as3-dis...@googlegroups.com
AW:
的确是这样的,MovieClipLoader已经从ActionScript 3.0中删除,取而代之的是Loader。

而目前Flex components里面的image 和 swfloader 这两个控件均实现了Loader的功能,其中它们的content属性,就是Loader的实例化形式。



++++++++++++++++++++
BLOG:http://www.k-zone.cn
RXNA:http://rxna.cn
++++++++++++++++++++


2009/5/6 Aw Guo <awfl...@gmail.com>
Reply all
Reply to author
Forward
0 new messages