【问题标题】:Does Javascript fire an event for unhandled/uncaught exceptions?Javascript 是否会针对未处理/未捕获的异常触发事件?
【发布时间】:2010-09-25 06:31:06
【问题描述】:

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

更新: tvanfosson 指出 onerror 是一种可能性。它不是规范的一部分,仅在基于 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

【问题讨论】:

    标签: javascript exception events web-applications try-catch


    【解决方案1】:

    尝试使用 onerror 处理程序。 Docs 来自 MDN。这将允许您在检测到错误时执行某些操作,但可能不会让您以 try/catch 块的优雅方式继续。请注意,浏览器之间的处理方式无疑存在差异。

    【讨论】:

    • 这是一个标准警告,禁止将 w3schools.com 用作参考。请参阅w3fools.com 了解更多信息。
    • @L0j1k 我现在通常不将它用作资源,但有趣的是,即使 w3fools.com 也认识到它们已经改进了。 “W3Schools 仍然存在问题,但他们至少已经解决了开发人员最关心的问题。对于许多初学者来说,W3Schools 有结构化的教程和游乐场,提供了不错的学习体验。但是,如果不学习更多内容就继续你的教育是错误的有信誉的来源,所以当你准备好升级时,继续前进。”
    • 链接已损坏
    • 更好的是,请发布您的示例以包含在问题中,而不是分享可能在 5 年内更改的链接。
    【解决方案2】:

    看看这个小提琴:

    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.我让你崩溃!!!来自 http://fiddle.jshell.net/xYsRA/1/show/:32 fiddle.jshell.net:21
    Caught[via 'error' event]: 'Uncaught Error: Hewwo world.我让你崩溃!!!来自 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:错误的…}
     fiddle.jshell.net:27\
    

    注意事项:

    • 如果删除“return true”/“evt.preventDefault()”行,那么在记录错误后,它将以正常方式在 JS 控制台上打印。

    • 与上面的陈述相反,window.onerror 在我测试的所有浏览器中都有效。但是,无论如何,addEventListener 方法可能更好,并提供更丰富的语义。

    【讨论】:

    猜你喜欢
    • 2012-09-16
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多