关闭标签向左,同时排除固定标签

时间:2016-09-11 20:13:10

标签: javascript google-chrome google-chrome-extension

我有一个扩展程序,最初使用清单版本1进行了一段时间。它使用了在Chrome 33中弃用的chrome.tabs.getSelectedchrome.tabs.getAllInWindow。我们现在几乎都在使用Chrome 54,所以我想要把它做得更新。清单中的当前权限是tabs。我听说这可能与它异步有关。

存在的扩展程序是一个关闭所选或有效标签左侧的所有标签的按钮。

function closeLeftTabs() { 
    var curTab;
    chrome.tabs.getSelected( null , function(tab) {  
        curTab=tab;
    });
    chrome.tabs.getAllInWindow(null,function(tabs) {
        for (var i = 0; i < tabs.length; i++) {
            if (tabs[i].index<curTab.index){
                chrome.tabs.remove(tabs[i].id, null);
            }
        }
    });
} 
chrome.browserAction.onClicked.addListener(function(tab) {    
      closeLeftTabs();
  });

我正在更新它以使用chrome.tabs.query的queryInfo参数忽略固定标签(不关闭它们),但按下按钮时JavaScript不再有效。这是我到目前为止的想法。

function closeLeftTabs() { 
    var curTab;
    chrome.tabs.query({highlighted: true}, function(tab) {  
        curTab=tab;
    });
    chrome.tabs.query({pinned: false},function(tabs) {
        for (var i = 0; i < tabs.length; i++) {
            if (tabs[i].index<curTab.index){
                chrome.tabs.remove(tabs[i].id, null);
            }
        }
    });
} 
chrome.browserAction.onClicked.addListener(function(tab) {    
      closeLeftTabs();
  });

现在单击带有上述代码的按钮似乎什么都不做。我没有太多的JavaScript经验,我还没有使用任何新的参数。我还尝试了currentWindowlastFocusedWindow布尔值,没有任何改变,所以我无法确定问题的根源。

1 个答案:

答案 0 :(得分:2)

要使用当前活动选项卡,请使用“active”属性。这是工作代码。

chrome.browserAction.onClicked.addListener(function(tab) {  
   closeLeftTabs();
});


function closeLeftTabs() {

  performActionOnCurrentTab(function(activeTab){
     if(activeTab) {
        chrome.tabs.query({currentWindow : true,pinned: false},function(tabs) {
             for (var i = 0; i < tabs.length; i++) {
                 if (tabs[i].index < activeTab.index){
                     chrome.tabs.remove(tabs[i].id, null);
                 }
             }
         });
     }
 });


}

function performActionOnCurrentTab(tabCallback) {
   chrome.tabs.query({ currentWindow : true, active : true },function (tabArray) { tabCallback(tabArray[0]); });
}