2011-09-21 9 views
8

誤って使用しているページにドロップすると例外がスローされる可能性があるJavaScript(Jquery Tools' Overlay)があり、正常に処理しようとしています。外部スクリプトファイルでjavascriptエラーをキャッチ

一般的なwindow.onerrorハンドラを使用して、これらのエラーを救済し、サーバに報告しますが、それはトリガされません。

私はこのコードをtry/catchすることはできません。これはHTMLのリモートスクリプトとして組み込まれているためです。

外部スクリプトがスローするエラーをどのように救助することができますか?

更新日:これは例です。私は自分自身を修正する必要があります.Window.onerror になりますが、スクリプトは実行されません(この例では警告は警告されません)。

<html> 
<script type="text/javascript"> 
window.onerror = function(e){ console.log("caught error: "+e); return true;} 
</script> 
<body> 

<!-- this is the line in the dom that causes the script to throw --> 
<a rel="nofollow"></a> 

<script type="text/javascript" src="http://www.google.com/jsapi"></script> 
<script type="text/javascript">google.load("jquery", "1.4.1");</script> 
<script src="http://cdn.jquerytools.org/1.2.5/tiny/jquery.tools.min.js"></script> 

<script type="text/javascript"> 
//this code will throw an error in jquery tools 
$("a[rel]").overlay(); 

alert("it's ok, I still ran."); 
</script> 

</body> 

</html> 
+0

は、定義されたあなたの 'window.onerror'ですか?そうでない場合、動作しません。 –

答えて

5

他のスクリプトがロード/実行される前にエラーハンドラを定義します。

<script>window.onerror = function(e){}</script> 
<script src="external.js"></script> 
<script> 
function ole(){alert("Hi!")} 
ole(); 
</script> 

スクリプトに構文エラーが含まれている場合は、エラーハンドラはいえ呼び出されません。エラーがスローされる前に

<script>window.onerror=function(e){alert("?")} 
<script> 
[email protected] //The error won't be caught. 
</script> 
+0

ありがとう、私はちょうど質問を更新しました。実際にはエラーを引き起こしていますが、継続するのではなく、制御フローも停止します。 –

+0

これは予想通りです。このエラーは '$'によってスローされ、ローカルのエラーハンドラによって捕捉されません。エラーがスローされると、その行の後のコードはそれ以上実行されません(この場合、グローバルスコープで定義されたコード)。 –

+0

今年のベストJavaScriptハッキング)あなたは私の日を作った –

関連する問題