关闭Chrome扩展中的标签页

4

我有一个名为popup.html的函数,它创建一个选项卡,插入一个mailto链接以触发本地(或Gmail)邮件事件。我希望它能自动关闭。我尝试了很多方法,但似乎我需要一个相当于以下操作的功能:

tabId = chrome.tabs.query(I DON'T KNOW!);
chrome.tabs.remove(tabId);

以下是当前的代码:

var query = { active: true, currentWindow: true };
function callback(tabs) {
    var currentTab = tabs[0];
    console.log(currentTab);
}
chrome.tabs.remove(chrome.tabs.query(query, callback));

但是它没有起作用。

如果有用的话,这是我创建选项卡的方法(它按预期工作):

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
        getTabs(tabs, function(full_mail_link){
          chrome.tabs.create({ url: full_mail_link });
        });
    });

非常感谢您的帮助!


关闭自身 = 关闭弹出窗口?关闭您打开的选项卡?还是两者都关闭? - Xan
3个回答

8

我不知道你的getTabs函数是做什么的。但是如果你知道如何找到你想要的选项卡的选项卡ID,你所需要做的就是

chrome.tabs.remove(tabId, optionalCallback);

2
谢谢 - 问题是我无法弄清楚如何首先获取tabId...有什么提示吗? - Jeremy Toeman
1
当前标签页的ID:chrome.tabs.query({currentWindow: true, active: true}, function(tabs){ tabId = tabs[0].id //tabs是一个标签页数组}) - Edwin Reynoso

5

这必须能够工作:

chrome.tabs.getSelected(null, function(tab) {
 chrome.tabs.remove(tab.id);
 });

getSelected已被弃用。https://developer.chrome.com/docs/extensions/reference/tabs/#method-getSelected。您需要使用chrome.tabs.query()-请参见Edwin对他的答案的评论。 - Tim John

-1

这应该可以工作:

//create the tab
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
    getTabs(tabs, function(full_mail_link){
      chrome.tabs.create({ url: full_mail_link }, callBackOnCreate);
    });
});

function callBackOnCreate(tab)
{
     globalCreatedTab = tab.id;
}

chrome.tabs.query({'active': true}, function(tabs) {
      for (var i = 0; i < tabs.length; ++i)
      {
          if (tabs[i].id === globalCreatedTab)
          {
              chrome.tabs.remove(tabs[i].id, [optional callback]);
          }
      }

 });

解决方案:使用带有回调函数的查询函数,并在回调函数中执行删除函数。
看起来普通的window.openwindow.close()也应该可以工作,tab-id是一个整数或包含整数的数组。

谢谢,但根据 Google 的说法,getSelected 已经被弃用了,现在应该使用 query。 - Jeremy Toeman
为什么要选择活动选项卡数组中的第一个?(提示:这是您的代码不够健壮的提示) - Xan
我的意思是,如果有多个窗口打开,你的代码会表现得很奇怪。 - Xan
OP 想知道为什么他的代码不起作用。 remove 代码需要在查询回调内部。如果您想要具有 ID 的选项卡数组。当然,您可以进行其他编码以检查选项卡是否为您创建的选项卡。会更新。 - Mouser
@Mouser 谢谢 - 抱歉打扰了,你有这个循环数组可能如何工作的示例吗? - Jeremy Toeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接