Mar*_*.io 8 javascript error-handling jquery logging
由于系统这些天越来越的Javascript(jQuery的,AJAX等)为主,我们一直试图让越来越多的错误日志记录发生的这些事情.
我担心的是,在jQuery本身,当创建或执行正常的DOM操作/ jQuery事件时,window.onerror无法捕获这些,这可能有助于通过让他们登录服务器来更快地调试生产中的错误
在2008年的这篇文章中(.onerror&jQuery bind try/catch {}),他们在甚至document.ready事件中添加了try/catch {}jQuery.bind() event.现在一切都经历了这个.on()事件,这篇文章有点陈旧,但我觉得逻辑仍然可以工作......
有没有人尝试过将这样的jQuery覆盖(try/catch系统)实现到自己的Projects中?
基本上我想继续使用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()?
Run Code Online (Sandbox Code Playgroud)
其他典型的错误记录格式:(当然也记录浏览器/ 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) { }
});
Run Code Online (Sandbox Code Playgroud)
我们在 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) { ... }
};
Run Code Online (Sandbox Code Playgroud)