在Chrome扩展中,是否有方法全局捕获/处理内容脚本中发生的JavaScript错误?(例如,用于提交到JavaScript错误跟踪服务,如bugsnag)
理想情况下,我会在内容脚本的顶部设置一个全局window.onerror
处理程序。但它在Chrome 40中无法正常工作:错误被捕获,但提供的信息是无用的:一个“脚本错误”的消息,没有url,lineNumber,列或堆栈错误对象。
我创建了一个测试扩展来显示内容脚本的这种破坏行为。详情见下文。有趣的发现:
window.onerror
在后台脚本中正常工作,并提供完整的错误信息- 主机网页上的
window.onerror
也可以see the error thrown by an extension content script(但错误也不包含任何有用的信息)
正在为Chrome扩展内容脚本复制损坏的window.onerror。
在新文件夹中,创建manifest.json
、content-script.js
和background-script.js
。然后通过Window > Extensions > Load unpacked Extension加载到Chrome中。
- 要查看内容脚本错误的busted window.onerror信息,请重新加载网页并查看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"]
}]
}
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: ' + lineNumber);
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?');
3条答案
按热度按时间ukxgm1gy1#
在提出这个问题5个月后,我现在非常确信目前没有一种简单的方法来全局捕获/处理内容脚本中发生的JavaScript错误。因此,
pxq42qpu2#
查看https://github.com/barbushin/javascript-errors-notifier/blob/master/content.js中Chrome扩展内容脚本的最完整错误处理-它是JavaScript Errors Notifier扩展的源代码。
70gysomp3#
看看TraceKit,这是我们公司用来做所有前端错误记录的东西。如果你将它与你最喜欢的日志服务的JavaScript客户端库合并结合起来,你就万事俱备了。