我正在研究通过Javascript自动进行页面错误检测的可能性.我找到了几个问题,答案允许您通过全局捕获Javascript编译和运行时错误window.onerror,但没有答案提到浏览器错误控制台中经常报告的其他类型的非Javascript错误.我主要对网络错误(无效的URI,SSL错误,HTTP错误,超时)和资源解释错误(不匹配的类型导致中止资源的解释,解析加载的资源上的错误等)感兴趣.
我检查了这个performance.getEntries方法,但是我很困惑地发现它似乎没有包含导致错误的网络请求(我只在Chrome 29中检查过......)
我不需要完全跨浏览器兼容性..只要它适用于某些浏览器,并且不会破坏其他浏览器,那很好.
分配函数window.onerror似乎是一种非常直接的方式来开始处理页面上的代码中的错误.但是,确保不覆盖预先存在的错误处理程序非常重要,因此通常的做法是保持对先前值的引用并将其作为新函数的一部分进行调用.举个例子:
var old_onerror = window.onerror;
window.onerror = function() {
// do something
if (old_onerror) {
old_onerror();
}
};
Run Code Online (Sandbox Code Playgroud)
我可以在网上找到的大多数文档/博客文章/等建议做这样的事情.他们为什么不建议为事件添加事件处理程序'error'呢?这允许在触发其中一个事件时调用多个函数,并且不需要笨拙地维护对其他错误处理程序的引用.
window.addEventListener('error', function() {/* do something */});
Run Code Online (Sandbox Code Playgroud)
编辑:我考虑过遵循关于这个主题的标准建议,但error事件window似乎是一个相当特殊的情况(例如,参见JQuery 显然缺乏对它的支持(在该页面上搜索"onerror")).我特意寻求洞察为什么onerror似乎是一个特例.