Javascript Chrome extensions WebRequest按tabId筛选不起作用?
我正在重构一个现有的chrome扩展,我调用了Javascript Chrome extensions WebRequest按tabId筛选不起作用?,javascript,google-chrome,google-chrome-extension,tabs,Javascript,Google Chrome,Google Chrome Extension,Tabs,我正在重构一个现有的chrome扩展,我调用了chrome.webRequest.onBeforeSendHeaders,应该根据当前选择的选项卡进行筛选 我正在使用文档,关于过滤,文档中说明: webRequest.RequestFilter筛选器允许限制对的请求 在不同维度中触发哪些事件: URL URL模式,例如*://www.google.com/foo*bar。类型请求 类型,例如main_frame(为顶层加载的文档 框架),子框架(为嵌入框架加载的文档), 和图像(网站上的图像)。
chrome.webRequest.onBeforeSendHeaders
,应该根据当前选择的选项卡进行筛选
我正在使用文档,关于过滤,文档中说明:
webRequest.RequestFilter筛选器允许限制对的请求
在不同维度中触发哪些事件:
URL URL模式,例如*://www.google.com/foo*bar。类型请求
类型,例如main_frame(为顶层加载的文档
框架),子框架(为嵌入框架加载的文档),
和图像(网站上的图像)。请参阅webRequest.RequestFilter。标签
标识一个选项卡的标识符。窗口ID窗口的标识符
因此,我的理解是,如果我将tabid定义为侦听器的一部分,那么应该根据tabid过滤所有请求(因此,只捕获来自该特定选项卡的请求头)
问题是这种情况不会发生。当我采用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,而object req中的tabId是另一个,它可能来自我打开并正在使用的任何选项卡(在1666上没有过滤掉)。您的示例代码的执行顺序错误
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(/*...*/);
});
谢谢你的回答。所以我猜-1 as tabId filter value只捕获了所有的头事件。而且,我知道我应该使用
chrome.tabs.query({active:true})
。。。这只是一个老例子。