web-dev-qa-db-ja.com

window.onerrorですべてのJavaScriptエラーをキャッチする方法(道場を含む)

この質問は javascript:スクリプトエラーをポップアップアラートに表示する方法? のフォローアップです。

<script type="text/javascript">
    window.onerror = function(msg, url, linenumber) {
        alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber);
        return true;
    }
</script>

私はそれを試してみて、このような道場のエロスを見つけました:

TypeError: this.canvas is undefined         dojo.js (Row 446)

私の質問につながるこの方法を使用して報告されていません:

window.onerror(特にdojoエラー)を使用してalljavascriptエラーを報告するにはどうすればよいですか?

28
jaronimoe

Dojoが適切なエラー処理メソッド(つまり、try-catchブロック)を使用していて、例外が発生して、エラーハンドラーを登録したウィンドウコンテナーに到達しないようにしている可能性があります。

もしそうなら、isこれを行う方法はありません。エラーはcatchブロックを通過しないため、エラーハンドラーは呼び出されません。

コメントで指摘されているように、Venkmanフックなどのブラウザ固有のデバッグAPIを使用して、エラー時のブレークを実行することもできます-通常は特権コードに対してのみ機能するソリューションです(@Sam Hanesに感謝します)。

On(require, 'error', function () {});を実行して、DOJOの非同期スクリプトローダーにエラー処理を追加することもできます-@buggedcomのコメントで言及されている別のポイント

15
Milad Naseri

より良い解決策は、try/catchを使用することです。

try{
    if(a=='a'){

    }
}catch(e){
    alert(e);
    //or send to server
    new Image().src='errorReport.php?e='+e;
}

Google Plusはこれを使用しているようです。

1
dexbol

次のようなコードを書くことができます:

var goErrHandler=window.onerror;
goErrHandler= function(msg, url, linenumber) {
console.log('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber);
return true;
}

goErrHandler();

コンソールには次のようなものが表示されます:

Error message: undefined
URL: undefined 
Line Number: undefined
1
SANJAY PANDYA