2

jserrors をスキャンするには、サードパーティの JS を実行する必要があります。Chromeのコンソールで次を実行しています

window.onerror = function(errorMsg, url, lineNumber) {
  alert(errorMsg);
}

throw new Error('foo');

コンソールからエラーが通知され、アラートがポップアップしてエラー メッセージが表示されることを期待しています。アラートが発生することはなく、イベントが発生していないと思います。なぜだめですか?

4

1 に答える 1

4

エラーがすぐにスローされた場合、 Chrome 開発者コンソールはユーザー定義のエラー イベント リスナーを呼び出しません( Paul S.によるこの回答によると)。

「ジャストインタイム」でエラーをスローする:

> window.onerror = function () {console.log('error!');};
function () {console.log('error!');}
> throw new Error();
Error

延期されたエラーをスローする:

> window.setTimeout(function() {throw new Error()}, 0);
xxxx
error!
Uncaught Error

( xxxxは の特定の戻り値ですsetTimeout())


これは、Chrome Dev Console が何らかの形で内部動作を変更するという点に私を導いた元のコード スニペットです。

// #btn is a simple button
document.getElementById("btn").addEventListener("click", function () {
    var script = document.createElement("script");
    script.innerHTML = "window.onerror=function(){alert('An error occurred!');};throw new Error('42');";
    document.head.appendChild(script);
});

このコードは、通常の HTML ファイルで実行されます。

于 2013-09-03T16:50:39.730 に答える