web-dev-qa-db-ja.com

Javascriptは、未処理/キャッチされていない例外に対してイベントを発生させますか?

未処理のJavaScript例外をログに記録しようとしています。例外がキャッチされないときに発生するイベントはありますか?ブラウザでjavascriptエラーが発生する前に例外をキャッチしようとしていますが、try/catch内でアプリケーション全体を実行したくありません。どんな助けでもいただければ幸いです。ありがとう!

更新:tvanfossonはonerrorを可能性として指摘しました。これは仕様の一部ではなく、IEまたはGeckoベースのブラウザーでのみ使用できます。

詳細情報- http://books.google.com/books?id=tKszhx-XkzYC&pg=PA386&lpg=PA386&dq=safari+onerror+javascript&source=web&ots=gQaGbpUnjG&sig=iBCtOQs0aH_EAzSbWlGa9

OnErrorサポートテーブル- http://www.quirksmode.org/dom/events/error.html

Mozillaのドキュメント- https://developer.mozilla.org/en/DOM/window.onerror

WebKitバグレポート- https://bugs.webkit.org/show_bug.cgi?id=8519

35

Onerrorハンドラーを使用してみてください。 Docs MDNから。これにより、エラーが検出されたときに何かを実行できますが、try/catchブロックのように適切な方法で続行することはおそらくできません。これが処理される方法には、間違いなくブラウザ間の違いがあることに注意してください。

9
tvanfosson

このフィドルをチェックしてください:

http://jsfiddle.net/xYsRA/1/

window.onerror = function (msg, url, line) {
    console.log("Caught[via window.onerror]: '" + msg + "' from " + url + ":" + line);
    return true; // same as preventDefault
};

window.addEventListener('error', function (evt) {
    console.log("Caught[via 'error' event]:  '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
    console.log(evt); // has srcElement / target / etc
    evt.preventDefault();
});


throw new Error("Hewwo world.  I crash you!!!");

throw new Error("Hewwo world.  I can only crash you once... :(");

どの印刷物:

キャッチ[window.onerror経由]: 'キャッチされていないエラー:Hewwoの世界。私はあなたをクラッシュさせます!!!」 http://fiddle.jshell.net/xYsRA/1/show/:32fiddle.jshell.net:21
Caught[via'error 'event]:' Uncaught Error:Hewwoworldから。私はあなたをクラッシュさせます!!!」 http://fiddle.jshell.net/xYsRA/1/show/:32fiddle.jshell.net:26
ErrorEvent{lineno:32、filename: "http://fiddle.jshell.net/ xYsRA/1/show/"、メッセージ:" Uncaught Error:Hewwoworld。Icrashyou !!! "、clipboardData:undefined、cancelBubble:false…} 
 fiddle.jshell.net:27\

ノート:

  • 「returntrue」/「evt.preventDefault()」行を削除すると、エラーがログに記録された後、通常の方法でJSコンソールに出力されます。

  • 上記のステートメントとは異なり、window.onerrorはテストしたすべてのブラウザーで機能しました。ただし、addEventListenerメソッドはおそらくとにかく優れており、より豊富なセマンティクスを提供します。

33
Dave Dopson