2013-06-12 44 views
4

我需要能夠捕獲一種類型的錯誤,這種錯誤可能發生在很多不同的頁面/腳本中,並在發生此錯誤時執行自定義邏輯。我打算用Javascript未捕獲的異常處理/ window.onerror msg參數格式

window.onerror = function (msg, url, line) { 
    if ({{my specific error happened}}){ 
     {{do some custom work}}; 
     return true; 
    } 
    //do nothing and let the browser notify the user of all the other errors 
} 

這樣的地方我可以做throw {{my specific error}}和捕捉它window.onerror。我試過throw "Magic";,但後來在window.onerror我得到msg == "Uncaught Magic"。請問「未捕獲」部分msg總是先於我拋出的字符串?我可以依靠它來檢測我的具體錯誤嗎? 或者是否有其他一些機制來檢測window.onerror中的錯誤類型?
我只需要它在Chromium中工作。

+4

我知道我不是在所有幫助...但「Uncaught Magic」也許是我見過的最有趣的例外。 :-) –

回答

3

某些瀏覽器現在傳遞實際的錯誤對象。不確定哪些瀏覽器支持這一點。據說壁虎31是必需的。不知道鉻和其他人。

您可以創建這樣一個自定義的錯誤:

Magic = function(message) { 
    this.name = 'Magic'; 
    this.message = message; 
} 
Magic.prototype = new Error(); 
Magic.prototype.constructor = Magic; 

扔它的地方:

throw new Magic('Kaboom'); 

,並抓住它在window.onerror這樣的:

window.onerror = function (message, filename, lineno, colno, error){ 
    if (error !== undefined && error.hasOwnProperty("name") && error.name == "Magic"){ 
     alert("some uncaught magic caused: " + message +" - in "+filename +"("+lineno+")"); 
     return true; 
    } 
} 

檢查fiddle **


你也可以檢查消息是否包含「Magic」,但是你可能會意外地發現其他包含「Magic」的錯誤。


PS:抱歉死靈,我偶然發現了這個搜索相同..所以我想我也可以添加一個答案..