8

由于这些天来的系统变得越来越面向 Javascript(jQuery、AJAX 等),我们一直在尝试为这些事情中的任何一个发生越来越多的错误日志记录。


我担心的是,在 jQuery 本身中,当创建或执行正常的 DOM 操作/jQuery 事件时,window.onerror无法捕获这些,这可能有助于更快地调试生产中的错误,方法是让它们登录到服务器

在 2008 年的这篇文章(.onerror 和 jQuery 绑定 try/catch{} )中,他们向甚至 document.ready 事件添加了try/catch {} 。jQuery.bind() event现在一切都经历了.on()这篇文章有点过时了,但我觉得逻辑仍然可以工作......

有没有人尝试在他们自己的项目中实现这样的 jQuery 覆盖(try/catch 系统)?

基本上我想继续使用 CDN 中的 jQuery,并且只是在我们的一个 JS 文件中 -.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/等)

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

我们在 window.onerror 和 jQuery ajax 错误中向服务器报告 JavaScript 错误,而不覆盖 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 回答