【问题标题】:window.onerror does not workwindow.onerror 不起作用
【发布时间】:2010-12-27 07:30:49
【问题描述】:

我在表单上有一些棘手的 AJAX 代码,有时它会失败(不要问为什么,我无法绕过它)。发生这种情况时,我需要捕获错误,重置隐藏字段指示器,并自然提交表单,以免用户产生不愉快的体验。我计划使用window.onerror 来执行此操作,但它永远不会触发!我正在使用 IE8,我只需要担心 IE 浏览器。让这个活动发挥作用有什么问题吗?这是我的代码...

window.onerror = function() {
  alert("Error!");
  document.getElementById("hidAjax").value = "0";
  document.forms[0].submit();
}

【问题讨论】:

  • 我希望throw "test"; 触发这个处理程序。它没有。

标签: javascript ajax error-handling


【解决方案1】:

“当他们的 onerror 处理程序没有被调用时会出现一个困扰许多开发人员的常见问题,因为他们为 Internet Explorer 启用了脚本调试。如果您安装了 Microsoft Script Debugger 或 Microsoft Visual Studio 6.0®,默认情况下会出现这种情况(特别是 Visual InterDev 6.0™)—错误处理是这些产品启动调试器的方式。您可以在 Internet 选项对话框的高级选项卡上禁用给定 Internet Explorer 实例的脚本调试(请注意,选中禁用脚本调试设置将仅适用于该 Internet Explorer 实例):"

http://msdn.microsoft.com/en-us/library/ms976144.aspx

【讨论】:

  • 开枪,我没想到!那么我的用户是否必须禁用此设置?
  • 是的,因为你不能依赖他们的环境,你必须找到其他方法来做到这一点。 try/catch,可能对你很有效,catch 块包含你当前 onerror 函数中的所有内容。
  • 只是阅读您的其他评论...也许您可以查询您的用户群,看看他们是否有这个设置?如果在这种情况下只有一小部分用户,您可以将其设置为他们需要关闭它的规定。您还应该能够检查他们是否有该设置,并为他们弹出一条信息性消息,告诉他们如何关闭它。
  • 废话。是时候编写一个程序来用 try/catch 包装每个函数体了。手动完成的代码太多了。这应该很有趣!
【解决方案2】:

try/catch 还引入了一个仅具有 catch 范围的附加错误对象。在性能很重要的应用程序中,这不是一个好主意。

【讨论】:

    【解决方案3】:

    有什么理由不只是对棘手的代码进行尝试/捕获?

    【讨论】:

    • 的代码;它被分成许多文件中的许多功能。
    • 因为这不是任何异常处理范例的正确用途。通过简单地将代码包装在异常处理程序中,您将无法准确了解代码的不足之处,从而编写出更草率的代码。仅当您作为开发人员已尽一切可能避免运行时异常并且代码仍可能失败时,才应使用异常处理。
    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多