In a Chrome extension, is there a way to globally trap/handle Javascript errors occurring in a content-script? (e.g. for submission to a Javascript error tracking service like bugsnag)
Ideally, I would setup a global window.onerror
handler at the top of the content script. But it's not working properly in Chrome 40: the error is caught, but the information supplied is useless: a message of 'Script error' and no url, lineNumber, column or error object with stack.
I created a test extension to show this busted behaviour for content scripts. Details below. Interesting findings:
Reproducing busted window.onerror for Chrome extension content script.
In a new folder, create manifest.json
, content-script.js
and background-script.js
. Then load into Chrome via Window > Extensions > Load unpacked Extension.
- To see the busted window.onerror info for a content-script error, reload a webpage and look at the devtools console
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"]
}]
}
content-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?');
question from:
https://stackoverflow.com/questions/28348008/chrome-extension-how-to-trap-handle-content-script-errors-globally 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…