Chrome扩展程序:选择下一个标签?

时间:2013-04-29 10:22:58

标签: google-chrome-extension tabs

Chrome扩展程序:如何激活当前标签旁边的标签(即右侧标签)。这是我的代码,但它无法正常工作 - 而不是下一个标签,随机的一个似乎被激活。

我是否正确地假设标签的索引属性在当前页面中从左到右指示其索引?

// switch to next tab
function nextTab() {
  // first, get currently active tab
  chrome.tabs.query({active: true}, function(tabs) {
    if (tabs.length) {
      var activeTab = tabs[0],
      tabId = activeTab.id,
      currentIndex = activeTab.index;
      // next, get number of tabs in the window, in order to allow cyclic next
      chrome.tabs.query({currentWindow: true}, function (tabs) {
        var numTabs = tabs.length;
        // finally, get the index of the tab to activate and activate it
        chrome.tabs.query({index: (currentIndex+1) % numTabs}, function(tabs){
          if (tabs.length) {
            var tabToActivate = tabs[0],
            tabToActivate_Id = tabToActivate.id;
            chrome.tabs.update(tabToActivate_Id, {active: true});
          }
        });
      });
    }
  });
}

编辑:

问题似乎是查询chrome.tabs.query({active: true}, function(tabs){...})似乎返回了多个标签。 我的窗口当前有14个选项卡,其中7个似乎具有active属性为true。这里发生了什么?我还尝试了基于{selected: true}的查询,但提供了错误:Invalid value for argument 1. Property 'selected': Unexpected property.

非常感谢任何帮助

1 个答案:

答案 0 :(得分:4)

您似乎打开了多个Chrome实例 要将标签查询的上下文保留到当前实例,您应该为每个查询添加currentWindow: true。否则它会搞砸所有其他实例中的所有标签ID。

例如,您的第一个查询将如下所示:

chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) { // ...