记ie8及以下版本ie的flash的addCallback的一坑

      近来有一需求,播放声音,我在高端浏览器实现了html5 audio标签、低端浏览器实现了flash兼容。但是在调试ie8以下的浏览器发现js死活调不了flash里的addCallback的方法,总报错:Object doesn't support this property or method。在stackoverflow上找的解决方法有:

1、延时调用容器方法

2、改变创建节点顺序法:先创建一个div,append到dom树,再创建flash节点append到div里

折腾了大半天,以上都试过了,都不好使。

最后终于找到解决方法:减少暴露的addCallback,当暴露的方法>=3时,ie8就有可能会报错。最先的适合我有4个暴露的容器方法,最后减少为1个,用一个容器方法传参去调用相应的原来需要暴露的方法。

private function init(): void {
    var e = ExternalInterface;
    if (e.available) {
        e.addCallback('doAction', this.doAction);
    }
}

public function doAction(_action: String = '', ...args): void {
    switch(_action) {
    case 'methodA':
        this.methodA.call(this, args);
    break;
    case 'methodB':
        this.methodB.apply(this, args);
    break;
    case 'methodC':
        this.methodC();
    break;
    }        
}   

 

真心坑人啊ie这个bug。。。

 

==================================================

作者:hotcho

出处:http://www.cnblogs.com/cos2004/p/3525111.html

==================================================

 

转载于:https://www.cnblogs.com/cos2004/p/3525111.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值