2012-11-06 14 views
7

最近のシステムではJavascript(jQuery、AJAXなど)の方がますます使いやすくなっているため、 。グローバルにログを記録するjQueryエラー(イベントとDOMエラー)


私の関心は、通常のDOM操作/ jQueryのイベントが作成または実行されているjQueryの自体、内、window.onerrorはこれらをキャッチすることができないということであり、これは彼らが記録されたことで、より高速な生産にデバッグバグを作るのを助けるかもしれません2008(.onerror & jQuery bind try/catch{})から、この記事では、サーバー

に、彼らはjQuery.bind() eventとさえdocument.readyイベントにのtry/catch {}を追加します。今度は全てが.on()イベントを経ていますが、この記事は少し古いですが、ロジックがまだ機能するように感じています...

誰かがこのようなjQueryの実装を試してみましたか?

基本的には、CDNのjQueryをそのままJSファイルの1つに使用したいのですが、これらの変更で.on()/$(document).ready()/etcイベントを拡張/上書きしてください。

jQuery.fn.extend({ // <-- can this be extended/overwritten ? 
    on: function(etc etc) { 
     // same code just add the additional 
     try { 
      // try to execute the original .on() 
     } 
     catch (ex) { 
      // log any errors/info (where/why/etc) 
     } 
    } 
}); 

// or even some sort of try/catch for $(document).ready()? 

他の典型的なエラーログのフォーマット:(コースのログブラウザ/ OS /のQueryStringの/ etcすぎ)

window.onerror = function (msg, url, line) { 
    // Log General Javascript Errors 
    // this won't log jQuery internal errors 
}; 

$.ajaxSetup({ // Log AJAX Errors 
    error: function (jqXHR, ajaxSettings, thrownError) { } 
}); 
+0

私が働く場所でエラーが起こることはありませんか?jQuery関数をオーバーライドするにはどうすればよいですか? – adeneo

+0

:)もちろん、最近誰かが間違いを犯しています。問題は私たちのページのいくつかでもっとも不思議なエラーを無作為に経験する多くのレガシーコンピュータ/ブラウザを扱っていることです。ログを記録するための完全な解決策を試してみると、おそらくそれを修正することができます。何かご意見は? –

答えて

3

我々はwindow.onerrorとjQueryのAjaxのエラーでサーバーへのJavaScriptエラーを報告し、 jQueryをオーバーライドすることなく、うまく動作します。

$.fn.oldOn = $.fn.on; 
$.fn.on = function(a,b,c,d,e,f) { 
    try { 
     $(this).oldOn(a,b,c,d,e,f); 
    } 
    catch (ex) { ... } 
}; 
+0

jQueryのイベント/コード内でtry/catchを行ったのですばらしいですか?私の最大の疑問は、実際にjQueryファイル自体を編集することなく、try/catchを追加するなど、 '.on()'をオーバーライドすることができるかどうかということでした。 –

+0

私はおそらく不明だった、申し訳ありません。 try/catchをオーバーライドしないで*提案するなどのエラーハンドラーを使用し、うまく機能していることがわかりました。ただし、必要に応じて上書きすることができます。私は答えを更新します。 –

+0

素晴らしい!このように設定することさえ考えませんでした。 Kudos Parched、よく見える。私はこの追加で今カバーされているものの99%を得ているように感じてください –

関連する問題