小编huc*_*lla的帖子

Chrome扩展程序:如何在全局范围内捕获/处理内容脚本错误?

在Chrome扩展程序中,有没有办法全局捕获/处理内容脚本中发生的Javascript错误?(例如,提交到像bugsnag这样的Javascript错误跟踪服务)

理想情况下,我会window.onerror在内容脚本的顶部设置一个全局处理程序.但它在Chrome 40中无法正常工作:错误被捕获,但提供的信息毫无用处:"脚本错误"消息,没有包含堆栈的url,lineNumber,列或错误对象.

我创建了一个测试扩展,以显示内容脚本的这种破坏行为.详情如下.有趣的发现:

  • window.onerror 在后台脚本中正常工作,具有完整的错误信息
  • window.onerror在托管网页上也可以看到扩展内容脚本抛出的错误(但错误也不包含任何有用的信息)

为Chrome扩展程序内容脚本重新生成已破坏的window.onerror.

在一个新的文件夹,创建manifest.json,content-script.jsbackground-script.js.然后通过Window> Extensions> Load unpacked Extension加载到Chrome中.

  • 要查看内容脚本错误的已破坏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"]
    }]
}
Run Code Online (Sandbox Code Playgroud)

内容的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: …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome google-chrome-extension

33
推荐指数
1
解决办法
5053
查看次数

Chrome扩展程序:识别后台页面iframe的网络请求?

我正在撰写Chrome扩展程序,代表用户定期检查网页.为了不引人注目,页面将加载到扩展程序隐藏的背景页面上的iframe中.是否可以仅识别此iframe发出的网络请求?

我最初的实验(见下文)似乎表明这很棘手.获取特定选项卡的所有Web请求非常简单:您拥有tabId,并可以使用该tabId过滤Web请求(通过WebRequest API).但对于后台页面iframe,不清楚"tabId等效"标识符是什么,或者如何使用它来过滤Web请求.

有什么想法吗?

我最初的实验细节如下.frameId值看起来很有希望,但我不相信它在扩展中是唯一的.

这个问题已经被要求用于Firefox:识别源自hiddenDOMWindow(或其中一个iframe)的请求

==实验==

作为实验,我:

  • 使用WebRequest API侦听所有Web请求
  • 在扩展程序的后台页面上创建了一个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

6
推荐指数
1
解决办法
1359
查看次数