我今天写了我的第一个chrome扩展,我想要它在后台打开一个标签(固定),在标签页面完成加载后,我希望标签关闭。
到目前为止,我有:
chrome.tabs.create({url: target, selected: false, pinned: true});
以上代码的作用是在后台打开选项卡并固定它。
如何在加载完成后关闭标签?
答案 0 :(得分:3)
您可以绑定chrome.tabs.onUpdated
或chrome.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);
});