在Chrome扩展程序中,有没有办法全局捕获/处理内容脚本中发生的Javascript错误?(例如,提交到像bugsnag这样的Javascript错误跟踪服务)
理想情况下,我会window.onerror在内容脚本的顶部设置一个全局处理程序.但它在Chrome 40中无法正常工作:错误被捕获,但提供的信息毫无用处:"脚本错误"消息,没有包含堆栈的url,lineNumber,列或错误对象.
我创建了一个测试扩展,以显示内容脚本的这种破坏行为.详情如下.有趣的发现:
window.onerror 在后台脚本中正常工作,具有完整的错误信息window.onerror在托管网页上也可以看到扩展内容脚本抛出的错误(但错误也不包含任何有用的信息)在一个新的文件夹,创建manifest.json,content-script.js和background-script.js.然后通过Window> Extensions> Load unpacked Extension加载到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"]
}]
}
Run Code Online (Sandbox Code Playgroud)
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: …Run Code Online (Sandbox Code Playgroud) 我正在撰写Chrome扩展程序,代表用户定期检查网页.为了不引人注目,页面将加载到扩展程序隐藏的背景页面上的iframe中.是否可以仅识别此iframe发出的网络请求?
我最初的实验(见下文)似乎表明这很棘手.获取特定选项卡的所有Web请求非常简单:您拥有tabId,并可以使用该tabId过滤Web请求(通过WebRequest API).但对于后台页面iframe,不清楚"tabId等效"标识符是什么,或者如何使用它来过滤Web请求.
有什么想法吗?
我最初的实验细节如下.frameId值看起来很有希望,但我不相信它在扩展中是唯一的.
这个问题已经被要求用于Firefox:识别源自hiddenDOMWindow(或其中一个iframe)的请求
==实验==
作为实验,我:
这是一个捕获的iframe Web请求:
{
"frameId": 2,
"method": "GET",
"parentFrameId": 0,
"requestId": "11988",
"tabId": -1,
"timeStamp": 1395423892612.272,
"type": "sub_frame",
"url": "http://en.wikipedia.org/wiki/Frog"
}
Run Code Online (Sandbox Code Playgroud)
tabId和parentFrameId值看起来很可疑.
frameId值看起来很有希望.如果我们知道帧的frameId,我们可以使用它来过滤请求吗?
可能,但是frameId值在浏览器扩展中并不是唯一的.我创建了另一个相同的扩展,并获得其背景iframe以加载相同的URL.它生成了一个相同的查看请求,具有相同的frameId(对于它自己的 - 但不同的 - iframe).此外,此Chromium问题涉及"框架ID冲突":https://code.google.com/p/chromium/issues/detail? id = 173325
javascript iframe google-chrome httprequest google-chrome-extension