打开选项卡,等待它完成加载然后关闭它

时间:2013-04-21 11:58:25

标签: javascript google-chrome google-chrome-extension chromium

我今天写了我的第一个chrome扩展,我想要它在后台打开一个标签(固定),在标签页面完成加载后,我希望标签关闭。

到目前为止,我有:

chrome.tabs.create({url: target, selected: false, pinned: true});

以上代码的作用是在后台打开选项卡并固定它。

如何在加载完成后关闭标签?

2 个答案:

答案 0 :(得分:3)

您可以绑定chrome.tabs.onUpdatedchrome.webNavigation.onCompleted事件来检测页面是否已完成加载,或插入内容脚本以关闭标签。

使用webNavigation.onCompleted事件

var tabsToClose = {};
chrome.webNavigation.onCompleted.addListener(function(details) {
    if (details.frameId !== 0) return; // Only process top-frame requests
    var tabId = details.tabId;
    if (tabsToClose[tabId]) {
        delete tabsToClose[tabId];
        chrome.tabs.remove(tabId);
    }
});

chrome.tabs.create({url: target, selected: false, pinned: true}, function(tab) {
    tabsToClose[tab.id] = 1;
});

注意:我认为导航将始终成功。您还应绑定webNavigation.onErrorOccurred事件以在失败时关闭选项卡。

使用内容脚本

使用runAt: 'document_idle'(默认),页面加载后会插入window.close();

chrome.tabs.create({url: target, selected: false, pinned: true}, function(tab) {
    chrome.tabs.executeScript(tab.id, {
        code: 'window.close();',
        runAt: 'document_idle'
    });
});

答案 1 :(得分:0)

chrome.tabs.create({url: target, selected: false, pinned: true}, myTab => {
    function listener(tabId, changeInfo, tab) {
        // make sure the status is 'complete' and it's the right tab
        if (tabId === myTab.id && changeInfo.status == 'complete') {
            chrome.tabs.remove(myTab.id);
            chrome.tabs.onUpdated.removeListener(listener);
        }
    };
    chrome.tabs.onUpdated.addListener(listener);
});