function testFun() {
onerror = function() { log("caught the error"); return true; };
setTimeout(function() { throw "bad bad bad"; }, 300);
};
これはサンプル、コードですが、問題を示しています。これをFFまたはIE7で実行すると、適切な「エラーをキャッチしました」というメッセージが出力されます(妥当な「ログ」関数を想定しています)。
ただし、VS2008でコードをデバッグすると、デバッガーはスローで停止し、「Microsoft JScriptランタイムエラー:例外がスローされ、キャッチされません」というメッセージが表示されます。「続行」または「無視」と言った場合、ログメッセージは生成されません。
私が使用している実際のコードはこれよりもはるかに大きいため、これは問題です。デバッグしたい場合もあります。したがって、2つの質問:
- 理由はわかっていますが、知らないフラグを使用してこの動作を変更できますか?
- このコードで自分が行っていると思うこと(グローバルな「onerror」ハンドラーを設定)を行っていますか?そうでない場合、このタイプのエラーをキャッチするための適切なパターンは何ですか?
注:代わりにwindow.onerrorを使用しても、この問題との違いはありません。