【问题标题】:closing two successive tabs from google chrome extension从谷歌浏览器扩展关闭两个连续的标签
【发布时间】:2011-06-18 10:45:35
【问题描述】:

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

当在目标站点上打开搜索页面时,会注入一个内容脚本,该脚本会向后台页面发送请求以在新选项卡中打开详细信息页面。当 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 返回。我不能只访问它并使用它来关闭详细信息页面吗?

【问题讨论】:

  • 弹出一条消息,要求用户按标签一角的小X。

标签: google-chrome google-chrome-extension


【解决方案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);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-15
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多