2010-06-22 24 views
6

我用IE和Mozila創建了一個錯誤信息。 不想與Safari,Chrome和Opera一起玩。Safari中的window.onerror(Javascript)

但我需要使用它。請給我正確的方式來做到這一點。

<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上確實非常不好支持;不確定是否有任何可以完成的事情。 – 2010-06-22 12:08:25

回答

5

Opera完全不支持window.onerror。 Chrome支持它,但不支持你自己拋出的錯誤。當使用除Error()以外的錯誤對象時,Internet Explorer也是如此。 TypeError()。 Chrome也不提供文件參數。

您應該正確地捕捉到要拋出的任何異常,而不是依賴於window.onerror,而是使用try...catch聲明。

+7

關鍵是要捕捉你不會拋出的異常/錯誤,但是這些異常/錯誤很可能發生在一個足夠複雜的JS中(例如,向用戶顯示一個很好的道歉信息)。我自己也在尋找同樣的問題,Chrome/Safari不會捕獲無效的參考錯誤 - 這可能是最常見的錯誤。 – sereda 2010-09-09 15:22:10

+0

@sereda:那麼恐怕你運氣不好,除非你想用try和catch語句來包裝每個代碼塊(請不要:-))。當然,解決方案是編寫無錯代碼並進行儘可能人性化的測試。 – 2010-09-09 16:33:46

+4

@AndyE您的第三方庫允許您只能編寫無缺陷代碼。例如,我在這裏結束了,因爲我必須使用錯誤的Facebook Javascript庫,並且它們拋出的異常甚至不能通過try/catch捕獲,因爲它從他們控制的對話中觸發。 – 2011-09-20 19:20:03