【问题标题】:Is there a way to try/catch an entire page dynamically?有没有办法动态地尝试/捕获整个页面?
【发布时间】:2011-01-31 02:49:50
【问题描述】:

我有一个页面,其中不断出现神秘的 JavaScript 错误。它们似乎来自我们使用的应用程序,并不拥有其来源。我正在研究这个问题的真正解决方案,但我们明天有一个演示,我想知道是否有办法在页面范围内抑制 JS 错误(比如将所有 javascript 组件包装在一个巨大的 try catch 中)。

【问题讨论】:

  • 一个巨大的尝试捕获会做什么?它会使您的代码静默失败,无法正常工作。
  • @Matt 很好,如果它适用于演示...查看更多信息here。一个巨大的 try/catch 似乎是首选的工具
  • @Pekka: 嗯,我...看起来相当虚弱。
  • @Matt, sed 's/seems rather/is totally/'
  • 我不会使用一个巨大的 try-catch。这将使识别和修复您的错误(甚至他们的错误)变得更加困难。考虑在上述 API 周围使用包装器,可以控制和包装单个操作(可能是基于对象或基于操作的)。

标签: javascript try-catch


【解决方案1】:

您可以向window.onerror 事件添加处理程序。在这种情况下,窗口内发生的所有错误都将被重定向到该事件的处理程序。 (我确实在 Firefox 中对此进行了测试并且它有效,但我在 Chrome 中遇到了问题 - 我的 Chrome 安装非常混乱,所以这可能是问题所在,但提交了与此问题相关的 Chromium 错误:@987654322 @和bug #8939)

window.onerror = function (msg, url, line) {
    alert("Error on line " + line + " in " + url + ":\n" + msg);
    // return true to prevent browser from displaying error
    return true;
}

【讨论】:

  • 刚刚看到 Pekka 在上面的评论中发布的链接...我没有在 IE 中测试这个(我周围没有 Windows 电脑),所以我不能确定它可以在该浏览器中以应有的方式工作。
  • 请,请,请不要使用这个! 修复代码。我已经浪费了太多时间来处理这种Microsoft SharePoint 中的糟糕想法。 (尽管答案为 +1)
  • 这太棒了!非常感谢您最后一分钟的修复。它应该有助于演示变得更好!附言适用于 Firefox、chrome 和 IE8(其他 ie 版本未经测试)
  • 请注意,尽管 onerror 处理程序会捕获异常,但在语法或运行时 JavaScript 错误之后,可能会删除或禁用所有事件侦听器。可以看到页面,但没有控件起作用。无论是否设置了 no onerror 侦听器,这种效果都会发生,但如果在包含错误的代码周围使用“try”构造而不是 onerror 侦听器,则不会发生。
猜你喜欢
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多