我正在尝试为 Google Chrome 创建一个简单的插件。其中一个功能是返回上次使用的选项卡,但我不知道该怎么做。
那么,有什么方法可以获取最后使用的选项卡吗?
您可以尝试在选项卡的 onSelected 事件中添加一个钩子,然后保存该变量...像这样:
var curTabID = 0;
var curWinID = 0;
chrome.tabs.onSelectionChanged.addListener(function(tabId, selectInfo) {
curTabID = tabId;
curWinID = selectInfo.windowId;
});
然后您就始终拥有窗口 id 和选项卡 id。
Chrome 121+ 或 Firefox Webextension 程序员 不必自己跟踪选项卡。由于 lastAccessed 属性,他们可以像这样查询它:
chrome.tabs.query({
active: false
}, (tabs) => {
let tab = tabs.reduce((previous, current) => {
return previous.lastAccessed > current.lastAccessed ? previous : current;
});
// previous tab
console.log(tab);
});
编辑:值得一提的是,如果在后台创建新选项卡,也会设置 LastAcessed 时间戳。所以这个方法并不完美,因为在后台打开的选项卡将被视为最后访问的选项卡。
我认为您应该使用 chrome.windows.getCurrent 函数来获取当前窗口,并使用 chrome.tabs.query 函数来获取此窗口中的活动选项卡。
这是一个示例(来自后台页面的脚本):
chrome.windows.getCurrent(
function(win) {
// win is a Window object referencing the current window
chrome.tabs.query({'windowId': win.id, 'active': true},
function(tabArray) {
// tabArray is a Tab Array referencing active tab(s)
}
);
}
);
对于V3
let lastTabID = 0
let lastWindowID = 0
chrome.tabs.onActivated.addListener(({tabId, windowId}) => {
lastTabID = tabId
lastWindowID = windowId
})
它需要一个 activeInfo,它是一个 object,其中包含属性
和tabId
windowId
并且您可以使用对象重组来帮助您(即
{tabId, windowID} = activeInfo
)
V2 至 V3
,需要 Manifest V3,取代chrome.tabs.onActivated()
chrome.tabs.onSelectionChanged()