1

try / catchブロック内でexecScriptを使用して、文字列化されたJavaScriptの一部を実行しています。文字列にexecScript内でjavascriptエラーがある場合、その後のページのリロード時にIE8のcatchブロック内で次のエラーが返されます。

「エラー:エラー80020101のため、操作を完了できませんでした。」

上記のような一般的なエラーをスローしないIE8でJavaScriptをグローバルに評価する他の方法はありますか?evalはグローバルコンテキストでJavaScriptを評価しないため、evalを使用しても機能しないことを私は知っています。

以下は私のコードがどのように見えるかに関するいくつかの設定です。fnは評価される文字列です。

// fn is defined somewhere above this code

function globalEvaluation() {
    if(document.defaultView) {
       document.defaultView.eval.call(undefined, fn);
    } else if (document.parentWindow) {
        document.parentWindow.execScript(fn);
    } 
}

return function() {
    try {
         globalEvaluation();
    } catch(e) {
       // do some error handling
       // in IE 8 I get the 80020101 error
   }
}
4

1 に答える 1

1

IEのスクリプトエンジンで無効なJavaScriptが検出された場合にこのエラーが発生するのを確認しました(最近の例:COMを介してSHDocVw.dllから直接無効なJavaScriptまたは存在しない関数を呼び出そうとしています)。だから私はそのエラーメッセージを、IE8はあなたが何か無効なものを与えていると単純に考えており、何があっても窒息するだろうと言っていると解釈します。

これが問題になる可能性がありますか?IE 8のdefaultViewと同等ですがdocument.defaultView.eval.call、IE9ではまだ問題なく動作しているようです。

私の推測では、バグがありますfn、多分何かがまだ範囲外ですか?無効と見なされるものを渡すと、常にその役に立たないエラーがスローされると思います。fn独自のnullチェック/エラー処理を行っていますか?

于 2012-06-11T22:29:57.507 に答える