Сам Chrome ведет себя странно в обратных вызовах вкладок, даже если не используется Rollbar.
Вот код теста, который я использовал:
chrome.tabs.getSelected(null, function(tab){
console.log('tabs callback', window);
throw 'Error in tab';
});
setTimeout(function(){
console.log('timeout callback', window);
throw 'Error in timeout';
}, 100);
Для обратного вызова тайм-аута как фоновая консоль, так и представление «Ошибки» для расширения показывают правильное расположение кода для исключения.
Однако для обратного вызова вкладок это местоположение отображается как _generated_background_page.html без обратной трассировки или номеров строк, как в консоли, так и в представлении «Ошибки». Похоже, сам Chrome не знает, откуда возникла ошибка.
У оконного объекта в обоих обратных вызовах хук onerror
правильно установлен на обработчик Rollbar. Однако в примере с вкладками он никогда не вызывается. Похоже, что Chrome отлавливает ошибку до того, как он попадает в обработчик onerror
, или какой-либо другой тип потока, который даже не использует обработчик onerror
.
В качестве обходного пути я попытался обернуть код в try / catch и сообщить в Rollbar:
chrome.tabs.getSelected(null, function(tab){
try {
console.log('tabs callback', window);
throw 'Error in tab';
}
catch (e) {
console.log('error', e);
Rollbar.log(e);
}
});
Это работает, но объект ошибки по-прежнему сообщает о своем местоположении как _generated_background_page.html. По крайней мере, оно имеет правильное сообщение об ошибке.