2013-01-25 53 views
12

我似乎無法在Chrome擴展文檔中找到有關異常處理的任何內容。所有的異步API使得它非常困難,而不會在任何地方使用try/catch語句亂拋垃圾代碼。Chrome擴展中的異常處理

如何添加一個全局異常處理程序到我的背景頁面,這將允許我做一些資源清理一個例外?

+0

有這些錯誤或異常時設置,也沒有明確的錯誤處理方法,因此直到日期一些變量。如果你想做資源清理,你可以把你的代碼放在一些管理事件處理程序中。 – Sudarshan

回答

12

嗨其實你可以得到與chrome.extension.lastError的執行腳本回調錯誤看到chrome extension documentation

所以實現應該是這樣的:

chrome.tabs.executeScript(tabId, details, function(){ 
    if (chrome.extension.lastError){ 
     var errorMsg = chrome.extension.lastError.message; 
     if (errorMsg == "Cannot access a chrome:// URL"){ 
      //Error handling here 
     } 
    } 
}) 

UPDATE 2017年

chrome.extension.lastError.message有現在已被棄用。 lastError實現仍然存在,但在chrome.runtime.lastError上。

實現這並不會改變太多的原有功能:

chrome.tabs.executeScript (tabId, details, function() { 
    if (chrome.runtime.lastError) { 
     var errorMsg = chrome.runtime.lastError.message 
     if (errorMsg == "Cannot access a chrome:// URL") { 
      // Error handling here 
     } 
    } 
}) 
+1

我需要清理的錯誤來自嘗試在404(無法加載)頁面上執行的內容腳本。在這種情況下,我需要檢查'chrome.runtime.lastError'而不是'chrome.extension.lastError'。在對答案進行小幅改動後,我的錯誤消失了。 – MDMower

3

我一直沒有找到一個全局錯誤處理程序,但我能夠想出一個可以正常工作的解決方案。

它取決於你打電話的方法。我的大部分錯誤都是通過在chrome://頁面或Chrome網頁商店頁面上撥打chrome.tabs.executeScript()來實現的。該函數的最後一個參數是一個包含results數組的回調。我發現如果這是undefined,我得到一個錯誤。通過這種方式,我可以設置一個簡單的錯誤處理函數來在出現錯誤時通知用戶。

chrome.tabs.executeScript(null, {file: '/path/to/file.js'}, function(results) { 
    if (results === undefined) { 
     // Fire error handling code 
    } 
}); 

再次,Idk如果這適用於您打電話的方法,但我能夠做到我想要的這種方式。