从Google Chrome扩展程序中关闭两个连续的标签页

时间:2011-06-18 10:45:35

标签: google-chrome google-chrome-extension

我正在为Google Chrome写一个扩展程序。

当在目标站点上打开搜索页面时,将注入一个内容脚本,该脚本向后台页面发送请求以在新选项卡中打开detailPage。当打开detailPage时,将注入一个内容脚本,该脚本向后台页面发送请求以在新选项卡中打开messagePage。当打开messagePage时,将注入一个内容脚本,该脚本发送消息并关闭messagePage选项卡。到现在为止还挺好。焦点返回到detailPage选项卡。

但如何关闭detailPage? messagePage中的脚本消失了。 detailPage中的脚本处于空闲状态。我想背景必须关闭detailPage选项卡和messagePage选项卡。我尝试了两个连续的chrome.tabs.remove命令,但这段代码只是挂起:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if (request.cmd == "closeMessage") {
        chrome.tabs.getSelected(null, function (tab) {
        chrome.tabs.remove(tab.id);
        chrome.tabs.getSelected(null, function (tab) {
        chrome.tabs.remove(tab.id);
        });
    }
});

在我看来,这必须是收到“closeMessage”cmd后的行动的一部分。但是怎么样?如果没有,怎么样?

据我所知,发件人的tab.id作为sender.tab.id返回。我不能只访问它并用它来关闭detailPage吗?

1 个答案:

答案 0 :(得分:1)

从背景页面创建这两个标签时 - 保存它们的ID。然后你可以在以后轻松关闭它们。

var detailTabId = null;
var msgTabId = null;
...
chrome.tabs.create({url: "detail.html"}, function(tab){
    detailTabId = tab.id;
});
...
chrome.tabs.create({url: "message.html"}, function(tab){
    msgTabId = tab.id;
});
...
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if (request.cmd == "closeMessage") {
        chrome.tabs.remove(detailTabId);
        chrome.tabs.remove(msgTabId);
    }
});