Подтвердить что ты не робот

Обработка исключений в расширениях Chrome

Я не могу найти ничего в документации по расширению Chrome об обработке исключений. Вся асинхронная apis делает это очень сложным, не засоряя код с помощью инструкций try/catch повсюду.

Как добавить глобальный обработчик исключений на мою фоновый рисунок, который позволит мне выполнить некоторую очистку ресурсов в случае исключения?

4b9b3361

Ответ 1

Привет, вы действительно можете получить ошибку в обратном вызове execute script с chrome.extension.lastError см. хромированную документацию по расширению

Итак, реализация должна быть примерно такой:

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
        }
    }
})

ОБНОВЛЕНИЕ 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
       }
    }
})

Ответ 2

Мне не удалось найти глобальный обработчик ошибок, но я смог найти решение, которое работает так же хорошо.

Это зависит от того, какие методы вы вызываете. Большинство моих ошибок возникло из вызова chrome.tabs.executeScript() на странице chrome:// или на странице Chrome. Последним параметром этой функции является обратный вызов, содержащий массив results. Я обнаружил, что если это было undefined, я получил ошибку. Таким образом, я смог настроить простую функцию обработки ошибок, чтобы уведомить пользователя о появлении ошибки.

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

Опять же, Idk, если это применимо к методам, которые вы вызываете, но я смог сделать то, что хотел, таким образом.