【问题标题】:window.onerror in Safari ( Javascript )Safari 中的 window.onerror ( Javascript )
【发布时间】:2010-06-22 11:50:13
【问题描述】:

我创建了一条错误消息,它与 IE 和 Mozilla 一起使用。 无法使用 Safari、Chrome 和 Opera。

但我需要使用它。请给我正确的方法。

<script language="javascript" type="text/javascript">
window.onerror = function(msg, url, line)
{
    document.write("Message\t = "+msg + "<br/>Location\t = " + url + "<br/>Line No.\t = " + line + "<br/>Error No.\t = " + this.err.number);
}
this.err = Error(12,"My Own Error");
throw this.err;
</script>

==========================================
Internet Explorer:

My Error
Message = My Own Error
Location = http://localhost/practice/JavaScript/window.errors.php
Line No. = 8
Error No. = 12 
================================================
Mozilla FireFox:

My Error
Message = Script error.
Location = My Own Error
Line No. = 0
Error No. = undefined 
=====================================================
Safari, Chrome, Opera:

My Error

查看 Mozilla 给出的错误信息的代码。我要做什么?

【问题讨论】:

标签: javascript error-handling


【解决方案1】:

Opera 根本不支持window.onerror。 Chrome 支持它,但不支持您自己抛出的错误。当使用 Error() 以外的错误对象时,Internet Explorer 也是如此,例如TypeError()。 Chrome 也不提供 linefile 参数。

您应该使用try...catch 语句正确捕获要抛出的任何异常,而不是依赖window.onerror

【讨论】:

  • 关键是要捕获你不会抛出的异常/错误,但这些异常/错误很可能在足够复杂的 JS 中发生(例如,向用户显示一个很好的道歉信息)。我自己也在研究同样的问题,Chrome/Safari 没有捕捉到无效的引用错误——这可以说是最常见的错误。
  • @sereda:那么恐怕你运气不好,除非你想用 try 和 catch 语句包装每个代码块(请不要:-))。当然,解决方案是编写无错误代码并尽可能多地进行人工测试。
  • @AndyE 您只能按照您的第 3 方库允许的方式编写无错误代码。例如,我最终来到这里是因为我必须使用有问题的 Facebook Javascript 库,而且他们抛出的异常甚至无法通过 try/catch 捕获,因为它是从他们控制的对话框触发的。
  • ' 解决方案当然是编写无错误代码并尽可能多地进行人工测试。'。 - 解决方案不符合现实。
猜你喜欢
  • 2013-11-24
  • 2018-02-01
  • 2018-10-16
  • 2014-12-21
  • 1970-01-01
  • 2011-10-29
  • 2010-12-18
  • 2015-03-03
  • 1970-01-01
相关资源
最近更新 更多