在chrome.webRequest.onBeforeRequest
我们会收到各种网址 - javascript,css等。
对于每个网址,我想知道主标签网址。
同步获取它的最简单方法是什么?
现在我用这种方式:
如果details.frameId == 0
,则details.url
包含此标签ID
chrome.webRequest.onBeforeRequest.addListener(
function (details) {
if (details.tabId == -1)
{
return;
}
if ("type" in details && ['main_frame', 'sub_frame'].indexOf(details.type) !== -1)
{
if (details.frameId == 0) {
all_tabs_info.add_tab_info(details.tabId, details.url);
}
}
},
{
urls: ['<all_urls>']
},
["blocking"]);
<小时/> 所以现在,如果对此标签ID有任何请求,我们已经有了标签网址。这种粗略的逻辑似乎有效。
答案 0 :(得分:1)
一些增强功能:
type
。 main_frame
类型by definition对应于顶级框架,这反过来意味着它的frameId
为0,所以不要听sub_frame
你可以完全省略检查。
值0表示请求发生在主框架中;正值表示请求发生的子帧的ID。如果加载(子)帧的文档(类型是main_frame或sub_frame),则frameId指示该帧的ID,而不是外框的ID。框架ID在选项卡中是唯一的。
type
不是可选的,您可以在文档中看到,无需怀疑其存在。
简化代码就是这样:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
if (details.tabId >= 0) {
all_tabs_info.add_tab_info(details.tabId, details.url);
}
},
{
urls: ['<all_urls>'],
types: ['main_frame'],
},
["blocking"]
);