2011-11-03 50 views
0

我正在爲javascript編寫一個測試套件,並需要一種方法來捕獲任何JS錯誤並繼續處理頁面的其餘部分。如何在JavaScript中捕獲並恢復全局錯誤?

我無法使用window.onerror,因爲返回true會停止瀏覽器繼續進行。我嘗試使用try {} catch塊,但由於各種原因,函數在setTimeout()窗口中運行,似乎搞亂了try catch塊。

例如,我做這樣的事情:

function test(msg, fn) { 
    $('#output').text(msg); 
    try { 
     fn.apply(this); 
    } catch(e) { 
     document.write('error'+e); 
    }; 
} 

,然後調用它像這樣

test('trying this', function() { setTimeout('afunction()',100); }); 

但如果機能缺失()失敗,不被抓住了錯誤。

有沒有人有任何解決方案或全球錯誤處理程序,讓我恢復的想法?

回答

2

window.onerror,您可以附加一個處理函數。如果該函數返回true,則錯誤被抑制:http://jsfiddle.net/pimvdb/qAv9J/2/

window.onerror = function(e) { 
    console.log(e); 
    return true; 
}; 
+0

這是否捕獲所有錯誤?我記得一些類似於PHP的東西,它沒有捕捉到嚴重錯誤。 - 這可能是簡單的JS,但我不知道它。感謝分享! – Smamatti

+0

@Smamatti:我相信它沒有捕獲語法錯誤,僅僅因爲解釋器無法解析'onerror'賦值,如果有的話。 – pimvdb

+0

@pimvdb在**回調**的情況下不起作用,例如從Ajax調用接收到的回調**,因此不適用於所有全局錯誤。 – JoshL