我制作了一个扩展程序,可以记住上一个选项卡,然后单击按钮,可以在当前选项卡和上一个选项卡之间切换。现在我想扩展它以记住上一个上一个选项卡。这将允许在当前标签关闭后在两个标签之间切换。但是,我正在努力解决代码逻辑问题。要在当前和上一个标签之间切换的代码:
var previousTab;
var currentTab;
// Switch tab on button click
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.update(previousTab, {selected: true});
});
// Update variables on tab change
chrome.tabs.onSelectionChanged.addListener(function(tab) {
if (previousTab == null) {
previousTab = tab;
}
if (currentTab == null) {
currentTab = tab;
}
else {
previousTab = currentTab;
currentTab = tab;
}
});
现在,关闭当前标签后,在两个标签之间切换的代码:
var previousTab;
var previousPreviousTab;
var currentTab;
// Switch tab on button click
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.update(previousTab, {selected: true});
});
// Update variables on tab change
chrome.tabs.onSelectionChanged.addListener(function(tab) {
if (previousTab == null) {
previousTab = tab;
}
if (currentTab == null) {
currentTab = tab;
}
if (previousPreviousTab == null) {
previousPreviousTab = tab;
}
else {
previousPreviousTab = previousTab;
previousTab = currentTab;
currentTab = tab;
}
});
// Update variables on tab removal
chrome.tabs.onRemoved.addListener(function(tab) {
previousTab = previousPreviousTab;
});
关于我的逻辑的一些事情一定是错的。当我打开两个新标签然后关闭最新标签时,点击切换按钮会引发错误tabs.update: No tab with id: 698.
答案 0 :(得分:1)
这是一个想法: 创建一个标签对象数组(您可以通过调用chrome.windows.getAll()来获取所有标签对象。将一个属性添加到名为“recent_use”的每个标签对象中。将当前选定的标签设置为“0”。
任何时候,选择一个标签,将其“recent_use”设置为0.将“1”添加到所有其他标签的“recent_use”。通过这种方式,随着时间的推移,您将获得最近关注哪个选项卡的好订单。
然后,根据用户点击的击键次数(您必须在此处定义自己的击键),将选项卡焦点更改为“recent_use”等于用户点击击键次数的选项卡。这样,该解决方案比以前和之前的选项卡更通用。
(顺便说一句,你必须在创建或关闭新标签时随时修改这个标签数组。但是你可以通过为这些事件添加回调来轻松实现这一点)
在某种程度上,这是LFU的实现 - http://en.wikipedia.org/wiki/Least_frequently_used
答案 1 :(得分:0)
虽然我喜欢Methos的通用方法,但我只需要能够在两个标签之间切换。我最终使用另一个布尔wasRemoved
和一个监听器onCreated
来解决它:
var previousPreviousTab;
var wasRemoved;
var previousTab;
var currentTab;
// Update variables on tab creation
chrome.tabs.onCreated.addListener(function(tabId, changeInfo, tab) {
previousPreviousTab = previousTab;
});
// Update variables on tab removal
chrome.tabs.onRemoved.addListener(function(tabId, changeInfo, tab) {
previousTab = previousPreviousTab;
wasRemoved = true;
});
// Update variables on tab change
chrome.tabs.onSelectionChanged.addListener(function(tab) {
if (previousTab == null) {
previousTab = tab;
}
if (currentTab == null) {
currentTab = tab;
}
else if (wasRemoved == true) {
currentTab = tab;
wasRemoved = false;
}
else {
previousTab = currentTab;
currentTab = tab;
}
});