javascript - Javascript 是否会为未处理/未捕获的异常触发事件?

标签 javascript exception events web-applications try-catch

我正在寻找记录未处理的 javascript 异常。是否有未捕获异常时触发的事件?我希望在异常导致浏览器中出现 javascript 错误之前捕获异常,但我宁愿不在 try/catch 中运行我的整个应用程序。任何帮助,将不胜感激。谢谢!

更新: tvanfosson 指出错误是一种可能性。它不是规范的一部分,仅在基于 IE 或 Gecko 的浏览器中可用。

了解更多信息 - http://books.google.com/books?id=tKszhx-XkzYC&pg=PA386&lpg=PA386&dq=safari+onerror+javascript&source=web&ots=gQaGbpUnjG&sig=iBCtOQs0aH_EAzSbWlGa9v5flyo#PPA387,M1

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

最佳答案

看看这个 fiddle :

http://jsfiddle.net/xYsRA/1/

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 方法可能更好并且提供更丰富的语义。

关于javascript - Javascript 是否会为未处理/未捕获的异常触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/339580/

相关文章:

python - pyGTK 检测所有窗口移动事件

c++ - 如何处理 Qt5 关闭事件以终止?

javascript - 如何自动用文本填充文本字段

javascript - MatDatepicker : No provider found for DateAdapter. 您必须在应用程序根目录中导入以下模块之一:MatNativeDateModule

kotlin - Kotlin 中的 throw 语句

java - 我怎样才能 "retry" try catch ?

c# - 如何创建通用事件引发方法

javascript - 移除类不起作用

javascript - 使用 CSS 在单击事件上分别为每个转换属性设置动画

c++ - C++中未处理的异常检查