由于现在系统越来越以Javascript(jQuery,AJAX等)为导向,我们一直在努力为这些事情中的任何事情发生越来越多的错误记录。
我担心的是,在jQuery本身中,当创建或执行正常的DOM操作/ jQuery事件时,window.onerror
无法捕获这些事件,这可能有助于更快地调试生产中的错误他们登录服务器
在2008年的这篇文章(.onerror & jQuery bind try/catch{})中,他们在 jQuery.bind() event
甚至文档中添加了 try / catch {} 。准备活动。既然所有事情都经历了.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 / 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 :(得分: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) { ... }
};