Javascript 是否会因未处理/未捕获的异常而触发事件?
-
19-08-2019 - |
题
我正在寻找记录未处理的 javascript 异常。是否有未捕获异常时触发的事件?我希望在异常导致浏览器中的 javascript 错误之前捕获异常,但我不想在 try/catch 中运行整个应用程序。任何帮助,将不胜感激。谢谢!
更新:tvanfosson 指出 onerror 是一种可能性。它不是规范的一部分,仅在基于 IE 或 Gecko 的浏览器中可用。
OnError 支持表 - http://www.quirksmode.org/dom/events/error.html
Mozilla 的文档 - https://developer.mozilla.org/en/DOM/window.onerror
WebKit 错误报告 - https://bugs.webkit.org/show_bug.cgi?id=8519
解决方案
尝试使用的onerror处理程序。 文档从MDN 。这将允许在检测到错误,当你做一些事情,但可能不会让你在一个优雅的方式,一个try / catch块将继续。要知道,无疑是在这是如何处理浏览器之间的差异。
其他提示
看看这个小提琴:
window.onerror = function (msg, url, line) {
console.log("Caught[via window.onerror]: '" + msg + "' from " + url + ":" + line);
return true; // same as preventDefault
};
window.addEventListener('error', function (evt) {
console.log("Caught[via 'error' event]: '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
console.log(evt); // has srcElement / target / etc
evt.preventDefault();
});
throw new Error("Hewwo world. I crash you!!!");
throw new Error("Hewwo world. I can only crash you once... :(");
哪个打印:
Caught[via window.onerror]: 'Uncaught Error: Hewwo world. I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:21 Caught[via 'error' event]: 'Uncaught Error: Hewwo world. I crash you!!!' from http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:26 ErrorEvent {lineno: 32, filename: "http://fiddle.jshell.net/xYsRA/1/show/", message: "Uncaught Error: Hewwo world. I crash you!!!", clipboardData: undefined, cancelBubble: false…} fiddle.jshell.net:27\
笔记:
如果删除“return true”/“evt.preventDefault()”行,则在记录错误后,它将以正常方式打印在 JS 控制台上。
与上面的陈述相反,window.onerror 在我测试的所有浏览器中都有效。然而,addEventListener 方法可能更好,并且提供更丰富的语义。
不隶属于 StackOverflow