在Chrome扩展程序中,是否可以全局捕获/处理内容脚本中发生的Javascript错误?(例如,用于提交到bugsnag之类的JavaScript错误跟踪服务)
理想情况下,我将window.onerror
在内容脚本的顶部设置一个全局处理程序。但是它在Chrome 40中无法正常工作:捕获了错误,但提供的信息无用:出现“脚本错误”消息,没有url,lineNumber,column或堆栈错误对象。
我创建了一个测试扩展,以显示内容脚本的这种无效行为。详细信息如下。有趣的发现:
window.onerror
在后台脚本中可以正常工作,具有完整的错误信息window.onerror
在托管网页上还可以看到扩展内容脚本引发的错误(但该错误也不包含任何有用的信息)在一个新的文件夹,创建manifest.json
,content-script.js
和background-script.js
。然后通过“窗口”>“扩展程序”>“加载解压缩的扩展程序”加载到Chrome中。
{
"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"]
}]
}
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?');
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?');
提出此问题5个月后,我现在非常确信目前还没有一种简单的方法可以全局捕获/处理内容脚本中发生的Javascript错误。因此,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句