我有一个扩展程序,最初使用清单版本1进行了一段时间。它使用了在Chrome 33中弃用的chrome.tabs.getSelected
和chrome.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经验,我还没有使用任何新的参数。我还尝试了currentWindow
和lastFocusedWindow
布尔值,没有任何改变,所以我无法确定问题的根源。
答案 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]); });
}