Safari中的window.onerror(Javascript)

6

我创建了一个错误消息,它可以在IE和Mozila上工作,但无法在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 给出了错误的信息。我该怎么办?


2
参考链接:http://www.quirksmode.org/dom/events/error.html 该事件在IE和FF上的支持确实非常糟糕,不确定是否有任何解决方法。 - Pekka
1个回答

4

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

为了正确处理任何可能抛出的异常,应该使用try...catch语句,而不是依赖于window.onerror


7
重点是捕获你不会抛出的异常/错误,但这些异常/错误在足够复杂的JS中很可能会发生(例如,向用户显示一个友好的道歉信息)。我自己也在研究同样的问题,Chrome/Safari无法捕获无效引用错误-这可能是最常见的错误。 - sereda
@sereda:那么恐怕你就没什么好运了,除非你想用try和catch语句包装每个代码块(请不要这样做:-))。当然,解决方案是编写无错误的代码并尽可能多地进行测试。 - Andy E
4
@AndyE 你只能编写与第三方库一样无错误的代码。例如,我现在遇到问题是因为我必须使用有缺陷的Facebook JavaScript库,而且他们抛出的异常甚至无法通过try/catch捕获,因为它是由他们控制的对话框触发的。 - Jasper Rosenberg
3
当然,解决方法是编写无误的代码并尽可能进行测试。- 这个解决方案不切实际。 - Quibblesome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接