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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值