在Chrome扩展程序中,有没有办法全局捕获/处理内容脚本中发生的Javascript错误?(例如,提交到bugsnag等Javascript错误跟踪服务)
理想情况下,我会在内容脚本的顶部设置一个全局window.onerror
处理程序。但它在Chrome 40中无法正常工作:错误被捕获,但所提供的信息毫无用处:“脚本错误消息”#39;并且没有带有堆栈的url,lineNumber,列或错误对象。
我创建了一个测试扩展,以显示内容脚本的这种破坏行为。详情如下。有趣的发现:
window.onerror
在后台脚本中正常运行,并提供完整的错误信息window.onerror
也可以see the error thrown by an extension content script(但错误不包含任何有用信息)在新文件夹中,创建manifest.json
,content-script.js
和background-script.js
。然后通过Window加载到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?');
答案 0 :(得分:21)
答案 1 :(得分:-1)
查看TraceKit,这就是我们在公司使用的所有前端错误记录。如果您将它与javascript客户端库结合使用,那么您可以设置自己喜欢的日志服务。
答案 2 :(得分:-1)
我知道我有点迟到(仅仅一年多),但仍然希望得到一个可能的答案。有两种主要方法可以做到这一点。
第一种方法是chrome.extension
API的子集。 chrome.extension.lastError
捕获错误,并将消息/摘要设置为字符串chrome.extension.lastError.message
。不幸的是,这几乎可以做到,你可以在Chrome Developer's documentation中查看。
使用事件侦听器的第二种方法是window.addEventListener('error', function(e) { ... });
,其中回调所采用的事件e
将错误的堆栈跟踪存储到e.error.stack
。这可以单独使用,也可以与第一种方法结合使用,您可以阅读here。
答案 3 :(得分:-1)
在https://github.com/barbushin/javascript-errors-notifier/blob/master/content.js中查看Chrome扩展程序内容脚本处理的最完整错误 - 它的JavaScript Errors Notifier扩展程序的源代码。