在谷歌C​​hrome扩展同步调用,(Synchronous call in Google Chro

2019-07-21 23:06发布

我工作的谷歌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"]);

有没有一种方法来调用同步? 或者一些其他的选择。

Answer 1:

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"]);


文章来源: Synchronous call in Google Chrome extension