如何打开标签页而不将其加载到Google Chrome扩展程序中?

时间:2018-08-21 11:27:49

标签: google-chrome-extension

我唯一想到的是使用chrome.tabs.discard,下面是我当前的代码:

var test_button= document.getElementById('test_button');
test_button.onclick = function(element) {
    var to_load = {"url": "https://stackoverflow.com", "active": false, "selected": false};
    chrome.tabs.create(to_load, function(tab) {
        chrome.tabs.discard(tab.id);
    });
};

但是,不是阻止此页面加载,而是在加载之前调用chrome.tabs.discard会导致Chrome将其替换为about:blank

我发现的唯一“解决方案”是等待选项卡加载,但是在卸载之前等待它达到目的,特别是如果我一次打开大量选项卡时。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

解决方案是仅在URL值更新后才在标签上调用chrome.tabs.discard,例如:

var tabs_to_unload = {}
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, changedTab) {
    if (tabs_to_unload[tabId] == true) {
        // We can only discard the tab once its URL is updated, otherwise it's replaced with about:empty
        if(changeInfo.url) {
            chrome.tabs.discard(tabId);
            delete tabs_to_unload[tabId];
        }
    }
});

var test_button= document.getElementById('test_button');
test_button.onclick = function(element) {
    var to_load = {"url": "https://stackoverflow.com", "active": false, "selected": false};
    chrome.tabs.create(to_load, function(tab) {
        tabs_to_unload[tab.id] = true;
    });
};

在我的情况下,确切的代码有点不同,因为我是在弹出窗口中执行这些操作的,并且其脚本注册的变量和侦听器的生存时间与弹出窗口一样长,但是其背后的原理是一样。