8

最近のシステムはますますJavascript(jQuery、AJAXなど)指向になっているので、これらのいずれかで発生するエラーログをますます取得しようとしています。


私の懸念は、jQuery自体の中で、通常のDOM操作/ jQueryイベントが作成または実行されると、window.onerrorこれらをキャッチできないことです。これにより、サーバーにログオンすることで、本番環境でのバグのデバッグを高速化できる可能性があります。

2008年のこの記事(.onerror&jQuery bind try / catch {} )では、 try /catch{}jQuery.bind() eventさらにdocument.readyイベントに追加しています。すべてがイベントを通過したので、.on()この記事は少し古くなっていますが、ロジックはまだ機能するように感じます...

誰かがそのようなjQuery上書き(try / catchシステム)を自分のプロジェクトに実装しようとしたことがありますか?

基本的に、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 /クエリ文字列などのログも)

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) { }
});
4

1 に答える 1

3

JavaScriptエラーをwindow.onerrorおよびjQueryajaxエラーでサーバーに報告しますが、jQueryをオーバーライドすることはなく、正常に機能します。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) { ... }
};
于 2012-11-06T20:52:52.533 に答える