ie 8と以下のバージョンieのflashのaddCallbackの1つの穴を覚えます

2911 ワード

最近、音声を再生する需要があり、私はハイエンドブラウザでhtml 5 audioラベル、ローエンドブラウザでflash互換性を実現しました.しかし、ie 8以下をデバッグしたブラウザでは、jsがflashのaddCallbackを無効にする方法が発見され、Object doesn't support this property or methodとエラーが発生しました.stackoverflowで探した解決方法は次のとおりです.
1、遅延呼び出しコンテナ方法
2、ノードの作成順序の変更:divを作成し、appendをdomツリーに作成し、flashノードappendをdivに作成する
長いこと振り回されたが,以上はやってみたが,どれも使いにくい.
最後にやっと解決策を見つけた:曝露を減らすaddCallback,曝露の方法>=3でie 8が誤報する可能性がある.最初の適合は私に4つの暴露の容器の方法があって、最後に1つに減らして、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このバグ..
 
==================================================
作者:hotcho
出典:http://www.cnblogs.com/cos2004/p/3525111.html
==================================================