JS/AS(Flash)通信失效的可能原因

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。

你可能感兴趣的:(html,HTTP服务器,File,IE,Flash,actionscript)