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

vbopmzt1  于 2022-12-16  发布在  Go
关注(0)|答案(2)|浏览(212)

我今天写了我的第一个chrome扩展,我想让它做的是在后台打开一个标签(固定的),在标签中的页面加载完成后,我想关闭标签。
到目前为止我有:

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

上面的代码所做的是在后台打开选项卡,并固定它。
加载完成后如何关闭选项卡?

cwtwac6a

cwtwac6a1#

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);
});
6fe3ivhb

6fe3ivhb2#

您可以绑定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'
    });
});

相关问题