近來有一需求,播放聲音,我在高端瀏覽器實現了html5 audio標籤、低端瀏覽器實現了flash兼容。可是在調試ie8如下的瀏覽器發現js死活調不了flash裏的addCallback的方法,總報錯:Object doesn't support this property or method。在stackoverflow上找的解決方法有:html
一、延時調用容器方法html5
二、改變建立節點順序法:先建立一個div,append到dom樹,再建立flash節點append到div裏瀏覽器
折騰了大半天,以上都試過了,都很差使。app
最後終於找到解決方法:減小暴露的addCallback,當暴露的方法>=3時,ie8就有可能會報錯。最早的適合我有4個暴露的容器方法,最後減小爲1個,用一個容器方法傳參去調用相應的原來須要暴露的方法。dom
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。。。this
==================================================spa
做者:hotcho調試
出處:http://www.cnblogs.com/cos2004/p/3525111.htmlcode
==================================================htm