2009-11-18 43 views
4

我有一個自定義異常類,我正在使用的特定情況。它可以從任何地方拋出,所以嘗試/捕捉並不真實。在window.onerror中捕獲一個自定義的JavaScript異常 - 在IE中

throw new CustomException; 

我要趕在window.onerror這個錯誤,並過濾出來,這工作在我到目前爲止測試的大多數瀏覽器的罰款。

var window_onerror = window.onerror || function() {return false;}; 
window.onerror = function(message, url, line) { 
    if (message.match(CustomException.prototype.name)) { 
    return true; 
    } else { 
    return window_onerror(message, url, line); 
    } 
}; 

然而,在IE中window.onerror函數接收Exception thrown and not caught,而不是我的自定義異常。

回答

1

我不知道任何方式來檢索處理程序中的拋出對象。作爲一種解決辦法,我建議拋出一個通用的運行時錯誤與自定義消息,即

throw new Error('foo') 

,並檢查

message === 'foo' 

處理函數裏面。

編輯:工作示例代碼:

window.onerror = function(message, url, line) { 
    alert(message === 'foo'); 
    return true; 
}; 

throw new Error('foo'); 
+0

我會授予你它在IE中的作用(這是我問的),但Firefox只報告'Script Error'。 – 2009-11-18 22:41:45

+0

@Justin:對我很好 - 我們可以看到一些代碼嗎? – Christoph 2009-11-18 22:56:19

+0

http://bitbucket.org/JustinLove/module/src/4f80d66afb94/請參閱在qunit/index.html中測試的script/cgd/Module.js拋出在第126行,異常定義和處理器從196開始。 – 2009-11-19 17:23:32

2

我們有我們使用上Exceptioneer.com通用的異常處理程序但每個瀏覽器具有不同的行爲,並報告以不同的方式同樣的例外。

此外,瀏覽器的不同本地化版本以不同方式發揮作用,例如,我看到一些用戶的俄語Javascript錯誤 - 而不是世界上最容易解析的東西。

該腳本可以讓你看到不同的瀏覽器如何採取行動的錯誤: -

window.onerror = function(message, uri, line) { 
    var fullMessage = location.href + '\n' + uri + '\n' + line; 
    alert(fullMessage); 
    return false; 
} 

感謝,

菲爾。

+1

Shouldn'你在'fullMessage' var中包含'message'嗎? – ajsharma 2013-02-10 19:05:36