如何选择当前选项卡右边的所有选项卡?

时间:2018-11-15 05:46:52

标签: javascript google-chrome-extension

如果您右键单击Chrome浏览器顶部的任何标签,则会在右侧看到一个名为 关闭标签的选项 。这将关闭当前活动选项卡右侧的所有选项卡。我正在尝试对Chrome扩展程序执行类似的操作。可以使用“对于当前活动标签的索引,直到最后一个标签的索引?”之类的循环来选择右侧的标签吗?

以下是开源Chrome扩展程序的源代码。该功能会选择当前窗口中除活动选项卡以外的所有选项卡,并“暂停”它们。我正在尝试编写类似的功能,但不是所有选项卡,它只需要选择活动选项卡右侧的选项卡即可。

  function suspendAllTabs(force) {
    const forceLevel = force ? 1 : 2;
    getCurrentlyActiveTab(activeTab => {
      if (!activeTab) {
        gsUtils.warning(
          'background',
          'Could not determine currently active window.'
        );
        return;
      }
      chrome.windows.get(activeTab.windowId, { populate: true }, curWindow => {
        for (const tab of curWindow.tabs) {
          if (!tab.active) {
            gsTabSuspendManager.queueTabForSuspension(tab, forceLevel);
          }
        }
      });
    });

2 个答案:

答案 0 :(得分:4)

每个选项卡都有一个index,其中显示了其位置。例如,第3个标签的索引为2(从0开始)。

因此,任何选项卡右侧的选项卡表示tab.index +1tabs.length

例如...
在活动标签的右侧获取标签

// get all the tabs in current window
chrome.tabs.query({currentWindow: true}, tabs => {

  let activeIndex;
  for (const tab of tabs) {
    // set the activeIndex so we wont have to run a loop on the tabs twice
    if (tab.active) { activeIndex = tab.index; }

    // tabs to the right of the active tab will have higher index
    if(typeof activeIndex !== 'undefined' && tab.index > activeIndex) {

      // tabs is on the right of the active tab ... do whatever needed
    }
  }
});

获取活动标签左侧的标签

// get all the tabs in current window
chrome.tabs.query({currentWindow: true}, tabs => {

  for (const tab of tabs) {
    // stop when reached the active tab
    if (tab.active) { break; }

    // tabs to the left of the active tab ... do whatever needed
  }
});

答案 1 :(得分:0)

在许多情况下非常有用且非常直观的另一个选项是使用过滤来获取新标签。

添加到@erosman的答案。获得标签后,您可以:

// All to right of current
tabs = tabs.filter((x)=> x.index > activeTab.index);

// All to left of current 
tabs = tabs.filter((x)=> x.index < activeTab.index);

// Do whatever with the new tabs.

只要满足过滤器中的条件,就可以采用类似的方法来获取任何标签!