我正在编写一个 Chrome 扩展程序,它会代表用户定期检查网页。为了不引人注目,该页面被加载到扩展程序的隐藏背景页面上的 iframe 中。是否可以仅识别此 iframe 发出的 Web 请求?
我最初的实验(见下文)似乎表明这很棘手。获取特定选项卡的所有 Web 请求非常简单:您拥有 tabId,并且可以使用该 tabId 过滤 Web 请求(通过 WebRequest API)。但对于后台页面 iframe,尚不清楚“tabId 等效”标识符是什么,或者如何使用它来过滤 Web 请求。
有什么想法吗?
我的初步实验细节如下。
FrameId 值看起来很有希望,但我不认为它在扩展中是唯一的。
这个问题已经被问到 Firefox 了:识别源自hiddenDOMWindow(或其 iframe 之一)的请求 https://stackoverflow.com/questions/19076691/identify-requests-originating-in-the-hiddendomwindow-or-one-of-its-iframes?lq=1
==实验==
作为一个实验,我:
- 使用 WebRequest API 侦听所有 Web 请求
- 在扩展程序的后台页面上创建了一个 iframe,并打开了一个 url。
这是捕获的 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"
}
tabId 和parentFrameId 值看起来很可疑。
frameId 值看起来很有希望。如果我们知道框架的frameId,我们可以用它来过滤请求吗?
有可能,但frameId 值在浏览器扩展中并不是唯一的。
我创建了另一个相同的扩展,并让其后台 iframe 加载相同的 url。它生成了一个看起来相同的请求,具有相同的frameId(对于它自己的但不同的iframe)。
另外,这个 Chromium 问题指的是“帧 ID 冲突”:https://code.google.com/p/chromium/issues/detail?id=173325 https://code.google.com/p/chromium/issues/detail?id=173325