В расширении Chrome есть способ глобально ловушки/обработки ошибок Javascript, встречающихся в контенте script? (например, для отправки в службу отслеживания ошибок Javascript, например bugsnag)
В идеале я бы установил глобальный обработчик window.onerror
в верхней части содержимого script. Но он не работает должным образом в Chrome 40: ошибка поймана, но предоставленная информация бесполезна: сообщение "Script error" и нет url, lineNumber, столбца или объекта ошибки со стеком.
Я создал тестовое расширение, чтобы показать это поведение с ошибками для скриптов контента. Подробности ниже. Интересные выводы:
-
window.onerror
работает корректно в фоновом режиме script, с полной информацией об ошибке -
window.onerror
на веб-странице хостинга также может увидеть ошибку, вызванную содержимым расширения script (но ошибка не содержит любая полезная информация).
Воспроизведение busted window.onerror для содержимого расширения Chrome script.
В новой папке создайте manifest.json
, content-script.js
и background-script.js
. Затем загрузите в Chrome через Window > Extensions > Load unpacked Extension.
- Чтобы просмотреть поврежденную информацию window.onerror для ошибки content- script, перезагрузите веб-страницу и посмотрите на консоль devtools.
manifest.json
{
"name": "Chrome extension content-script errors test",
"manifest_version": 2,
"version": "0.0.1",
"background": {
"scripts": [ "background-script.js" ]
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["content-script.js"]
}]
}
контент- script.js
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
console.log('Caught content script error');
console.log('errorMsg: ' + errorMsg);
console.log('url: ' + url);
console.log('lineNumber: ' + column);
console.log('column: ' + column);
console.log('errorObj follows:');
console.log(errorObj);
return true;
};
console.log('I am a content script, about to throw an error');
throw new Error('Is this error caught?');
background- script.js
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
console.log('Caught background script error');
console.log('errorMsg: ' + errorMsg);
console.log('url: ' + url);
console.log('lineNumber: ' + column);
console.log('column: ' + column);
console.log('errorObj follows:');
console.log(errorObj);
return true;
};
//To see nice window.onerror behaviour for background script..
//Uncomment 2 lines below, reload extension, and look at extension console
//console.log('I am a background script, about to throw an error');
//throw new Error('Is this error caught?');