更新
基于OP的额外要求,以下解决方案具有以下规格:
- 将活动选项卡左侧的选项卡移动到新窗口。
- 将新窗口配置为与原始窗口具有相同的位置、大小和状态。
- 删除默认在新窗口中创建的空选项卡。
- 将焦点赋予原始窗口(完成后)。
你可以这样做:
- 从活动窗口中获取所需信息(使用chrome.windows.get)。
- 确定应移动哪些选项卡 ID。
- 创建一个空窗口(使用chrome.windows.create)。
- 将它们全部移动到步骤 (1) 中创建的窗口(使用chrome.tabs.move)。
- 控制新创建的窗口和移动选项卡的确切行为(使用chrome.windows.update、chrome.tabs.remove)。
示例background.js如下所示:
chrome.browserAction.onClicked.addListener(function(tab) {
/* Get the `tab`'s window along with its containing tabs */
chrome.windows.get(tab.windowId, { populate: true }, function(oldWin) {
/* Determine which tabs should be moved
* (i.e. are on the left of `tab` */
var tabs = oldWin.tabs;
var tabsToMove = [];
for (var i = 0; i < tabs.length; i++) {
if (tabs[i].index < tab.index) {
tabsToMove.push(tabs[i].id);
}
}
/* If there are any tabs to move... */
if (tabsToMove.length > 0) {
/* Create a new window with the same
* location and size as the original */
chrome.windows.create({
top: oldWin.top,
left: oldWin.left,
width: oldWin.width,
height: oldWin.height,
focused: false
}, function(newWin) {
/* Remove the new, empty tab created by default */
chrome.tabs.query({
windowId: newWin.id
}, function(tabsToClose) {
/* Update the window's state (e.g. "maximized") */
chrome.windows.update(newWin.id, { state: oldWin.state });
/* Move the tabs to the newly created window */
chrome.tabs.move(tabsToMove, {
windowId: newWin.id,
index: -1
}, function() {
/* Close any tabs that pre-existed (i.e. 1 empty tab)
* [Do not do this BEFORE moving the tabs,
* or the window will be empty and will close] */
var lastIdx = tabsToClose.length - 1;
tabsToClose.forEach(function(t, idx) {
chrome.tabs.remove(t.id);
if (idx === lastIdx) {
chrome.windows.update(oldWin.id, {
focused: true
});
}
});
});
});
});
}
});
});
为了完整起见,随附的manifest.js可能如下所示:
{
"manifest_version": 2,
"name": "Test Extension",
"version": "0.0",
"offline_enabled": true,
"background": {
"persistent": false,
"scripts": ["background.js"]
},
"browser_action": {
"default_title": "Test Extension"
//"default_icon": {
// "19": "img/icon19.png",
// "38": "img/icon38.png"
//},
},
"permissions": [
"tabs"
]
}