tag:
js as 通信 调用 flash actionscript ExternalInterface addCallback call 失效
我在AS2开发中遇到了这样的问题:
通过ExternalInterface.addCallback给flash对象添加的方法,在IE6,FF3.5等环境均能正常调用,但是一到IE7/IE8中就出现问题。
但是之前开发的作品中,有些又没有这样的问题。
经过检查,发现是因为没有在意,将addCallback()方法的调用写在了全局过程之中。
这样可能会导致一个问题:在Flash加载未完全就绪的情况下,调用addCallback()可能无法起到其应有的作用。
解决办法如下:
推荐方法:在AS2中,将addCallback()的调用代码转移到_root.onLoad事件处理函数之中,可以保证代码执行时,Flash已经加载就绪。
或者,据说,将addCallback()丢到setTimeout中以延时执行,也能够达到目的。(不过感觉延时多久才好?要不要反复以多重保险?)
此处顺带一提,js调用flash对象的方法,同样最好等到flash加载就绪之后再调用。
那如何知晓flash何时已经加载就绪呢?
仍然推荐:在AS2中的_root.onLoad事件中利用ExternalInterface.call()通知js:Flash已经准备就绪!
AS3暂无研究,不过思路应该类似。
再顺带一提,有时找不到flash对象的方法,可能是因为安全限制的问题。
请尝试修改flash对象HTML标签的属性
<param name="allowScriptAccess" value="always" />
或
<embed allowScriptAccess="always">
再就是有些情况下通过file://协议本地访问,也会受到安全限制。
可尝试发布到http服务器上再访问(本地服务也可,只要是http://协议就行)。
参考资料:
网络搜索:As和js通信问题完全解析(解决addcallback失效的问题)
这份资料内容现在看来好像有些过于复杂,某些做法貌似也并非最优,不过关键是它让我想到了addCallback()“过早”执行的bug。