我工作的谷歌Chrome浏览器扩展,其中有块/重定向某些传出请求。 为此,我用chrome.webRequest.onBeforeRequest
监听器。 要决定,是否阻止请求或不是,我需要对标签要求的一些信息是发送。 余可使用得到它chrome.tabs.get(integer tabId, function callback)
,但回调是异步的,这意味着该值是从返回后它可以被称为onBeforeRequest
侦听器。
chrome.webRequest.onBeforeRequest.addListener(function(details){
chrome.tabs.get(details.tabId, function(tab){
// get info from tab
});
// based on info from tab return redirect or not
}), {
urls: ["<all_urls>"],
types: ["main_frame"]
}, ["blocking"]);
有没有一种方法来调用同步? 或者一些其他的选择。
Stack Overflow上的另一个答案建议你的监听功能,完全避免了这个问题之外的选项卡保持跟踪。
示例代码:
/*
* --------------------------------------------------
* Keep list of tabs outside of request callback
* --------------------------------------------------
*/
var tabs = {};
// Get all existing tabs
chrome.tabs.query({}, function(results) {
results.forEach(function(tab) {
tabs[tab.id] = tab;
});
});
// Create tab event listeners
function onUpdatedListener(tabId, changeInfo, tab) {
tabs[tab.id] = tab;
}
function onRemovedListener(tabId) {
delete tabs[tabId];
}
// Subscribe to tab events
chrome.tabs.onUpdated.addListener(onUpdatedListener);
chrome.tabs.onRemoved.addListener(onRemovedListener);
/*
* --------------------------------------------------
* Request callback
* --------------------------------------------------
*/
// Create request event listener
function onBeforeRequestListener(details) {
// *** Remember that tabId can be set to -1 ***
var tab = tabs[details.tabId];
// Respond to tab information
}
// Subscribe to request event
chrome.webRequest.onBeforeRequest.addListener(onBeforeRequestListener, {
urls: ["<all_urls>"],
types: ["main_frame"]
}, ["blocking"]);