window.onerror
クライアント側のエラーをキャッチしてログに記録するために使用しています。このアプローチに関するさまざまな警告について読んだことがありますが、この特定のケースに関する情報を追跡することはできませんでした。
何らかの理由で、IE9 はスタック オーバーフローの例外をキャッチしないようです。以下の例は、Chrome と Firefox で実行した場合と、IE9 で devtools を使用してブラウザ モードを IE8 または IE7 に設定した場合の両方のエラーをキャッチします。ただし、IE9 モードで実行すると、'test' is undefined
例外をキャッチするだけで、スタック オーバーフロー例外は無視されます。
これを示すために、簡単な例をまとめました。
window.onerror = errorHandler;
function errorHandler (msg) {
alert(msg);
}
setTimeout(function () {
test.test = "test";
}, 1000);
setTimeout(function stackoverflow() {
stackoverflow();
}, 2000);
これも実際の例です:http://jsfiddle.net/Mzvbk/1/
これがなぜなのか、誰かが光を当てることができますか?
2012 年 8 月 29 日更新
この質問をInternet Explorer Developer Centerにも投稿しましたが、これまでのところあまり役に立ちませんでした。
この時点で、最良の推測 (@RyanKinal のコメントで示唆されているように) は、呼び出しスタックのサイズを超えているため、スタックにエラー ハンドラーへの呼び出しを配置する余地がないことです。
エラー処理は通常のスタックとは別に処理されると信じたいのですが、他のブラウザー (IE の古いバージョンでも) にあるように見えますが、そうでない場合は、リファレンスを参照してください。これが実際にIE9に当てはまることを示すバグレポートまたは何らかの声明。
2012 年 9 月 5 日更新
Ren と Vega がコメントで説明したように、Firefox 15 は時々 (一見ランダムに) その例外も飲み込むようです。