我正在重构现有的Chrome扩展程序,我打电话给chrome.webRequest.onBeforeSendHeaders
,应根据当前选择的标签进行过滤。
我正在使用文档here,并且就过滤而言:
webRequest.RequestFilter过滤器允许限制请求 哪些事件以各种方式触发:
网址网址格式,例如*://www.google.com/foo*bar。类型请求 类型,例如main_frame(为顶级加载的文档) frame),sub_frame(为嵌入式框架加载的文档), 和图像(网站上的图像)。请参阅webRequest.RequestFilter。标签 ID一个选项卡的标识符。窗口ID窗口的标识符。
据此,我理解如果我将tabid定义为侦听器的一部分,我应该根据选项卡ID筛选所有请求(因此,只捕获来自该特定选项卡的请求标头)。 / p>
问题是这不会发生。当我采用tabid:xx过滤器时,我会继续捕获来自我打开的各个标签的所有请求。
我错过了什么?
以下是后台脚本 background.html :
中的示例代码var currentTabId = -1;
chrome.tabs.getSelected(null, function(tab){
currentTabId = tab.id;
console.log("tab id in getselected "+currentTabId);
});
chrome.webRequest.onBeforeSendHeaders.addListener(
function(req){
console.log("-> Request Headers received for "+req.url);
console.log('onBeforeSendHeaders tab id: '+currentTabId)
console.log('onBeforeSendHeaders: '+JSON.stringify(req))
}
, { urls:["http://*/*", "https://*/*"], tabId: currentTabId }, ['requestHeaders','blocking']);
currentTabId是例如1666,而对象req中的tabId是另一个,可能来自我打开的任何一个标签,我正在使用它(它在1666年没有过滤掉)。
答案 0 :(得分:3)
您的示例代码执行顺序错误; chrome.tabs.getSelected
是异步的。
var currentTabId = -1;
chrome.tabs.getSelected(null, function(tab){
currentTabId = tab.id;
// Here, currentTabId is defined properly
console.log("tab id in getselected "+currentTabId);
});
// Here, it is still -1
您需要将addListener
来电转移到getSelected
回调:
chrome.tabs.getSelected(null, function(tab){
currentTabId = tab.id;
console.log("tab id in getselected "+currentTabId);
chrome.webRequest.onBeforeSendHeaders.addListener(/*...*/);
});