javascript - Chrome 扩展 : identify web requests of background-page iframe?

标签 javascript google-chrome iframe google-chrome-extension httprequest

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

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

有什么想法吗?

我最初的实验细节如下。 frameId 值看起来很有希望,但我不认为它在扩展程序中是唯一的。

此问题已针对 Firefox 提出:Identify requests originating in the hiddenDOMWindow (or one of its iframes)

== 实验 ==

作为实验,我:

  • 使用 WebRequest API 监听所有网络请求
  • 在扩展程序的后台页面上创建了一个 iframe,并打开了一个 url。

这是一个捕获的 iframe 网络请求:

{
  "frameId": 2,
  "method": "GET",
  "parentFrameId": 0,
  "requestId": "11988",
  "tabId": -1,
  "timeStamp": 1395423892612.272,
  "type": "sub_frame",
  "url": "http://en.wikipedia.org/wiki/Frog"
}

tabId 和 parentFrameId 值看起来很可疑。

frameId 值看起来很有希望。如果我们知道框架的 frameId,我们可以使用它来过滤请求吗?

有可能,但 frameId 值在浏览器扩展中不是唯一的。 我创建了另一个相同的扩展,并让它的背景 iframe 加载相同的 url。它生成了一个外观相同的请求,具有相同的 frameId(对于它自己的 - 但不同的 - iframe)。 此外,此 Chromium 问题涉及“帧 ID 冲突”:https://code.google.com/p/chromium/issues/detail?id=173325

最佳答案

事态

您好 - 正在努力解决类似的问题,这是我发现的:

The tabId and parentFrameId values look suspect.

查看 the documentation对于返回到 WebRequest 回调处理程序的详细信息对象:

  • tabId 在没有选项卡时设置为 -1(如在后台页面中)。
  • 因为扩展在它们自己的进程中 0 表示父级是您的顶级框架

使用 chrome.tabscan actually get a tabId for a background page但不幸的是,正如您所发现的,WebRequest 总是为 tabId

提供 -1

一般来说,似乎 WebRequest 将被弃用,取而代之的是 DeclarativeWebRequest 但是 development of the latter is currently on pause .

潜在的实际解决方案:

我还没有对此进行测试,但有可能只有从您的后台页面发出的请求对您可用,并且 tabId 为 -1。您可能会针对这些进行过滤。

Hacky 解决方案:

  1. 将一个框架注入(inject)到具有已知目标 URL 的选项卡中的实际页面上。该 URL 甚至可以是您的扩展程序中可通过 Web 访问的 URL,以避免冲突。
  2. 扩展端跟踪生成该请求的 tabId 和 frameId。
  3. 在 iframe 中加载您感兴趣的实际页面(通过重定向或将 iframe 的内容作为页面的另一个 iframe)。
  4. 使用存储的 tabId 和 frameId(可用作请求的 parentId)来决定过滤哪些请求。

关于javascript - Chrome 扩展 : identify web requests of background-page iframe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22568457/

相关文章:

javascript - IE10 在文档打开后但在文档写入之前执行功能问题?

Javascript/jQuery 让函数在继续之前等待回调

javascript - 有没有办法在没有全局变量的情况下取消 requestAnimationFrame ?

javascript - 如何在一条线上填充封闭的形状?

Google Chrome 的 CSS 对齐问题

html - 如何将YoutubePlaylist包含到html中?

Javascript:将用户名列表获取到控制台/文件

css - 带有 chrome 和 IE 的 Html-List css

google-chrome - URL 是否有注释字符?

javascript - 如何调用 iFrame 按钮的窗口 onunload 事件单击父页面和 iFrame 位于不同域的位置