我正在撰写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)
== Experiment ==
作为实验,我:
以下是捕获的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
答案 0 :(得分:2)
事态
嗨 - 在类似的问题上挣扎,这就是我发现的:
tabId
和parentFrameId
值看起来很可疑。
查看the documentation以获取返回给WebRequest回调处理程序的详细信息对象:
tabId
设置为-1。(如在后台页面中)。使用chrome.tabs
您can actually get a tabId for a background page但遗憾的是,正如您所发现的那样,WebRequest总是为tabId
通常,似乎WebRequest
将被弃用,而不是DeclarativeWebRequest
,而是development of the latter is currently on pause。
潜在的真正解决方案:
我没有对此进行测试,但可能只有您的后台页面发出的请求才可用,并且tabId为-1。你可以过滤这些。
Hacky解决方案: