听起来您正在创建一个“子”选项卡,在这种情况下,您应该同时设置 theindex
和openerTabId
:
function addChildTab(url, parentTab) {
chrome.tabs.create({
'url': url,
'windowId': parentTab.windowId,
'index': parentTab.index + 1, // n.b. index not id
'openerTabId': parentTab.id // n.b. id not index
});
}
设置openerTabId
意味着新选项卡将正确关联为父选项卡的子选项卡,因此:
- 如果您在子选项卡处于活动状态时关闭它,则父选项卡将成为活动选项卡(而不是子选项卡右侧的选项卡)。这使得它的行为方式与用户在新选项卡中打开的链接相同。
- 在树中显示选项卡的扩展将正常工作。
另请参阅添加此内容的https://code.google.com/p/chromium/issues/detail?id=67539 。
注意:如果您在后台打开选项卡(通过传递active:false
),则parentTab.index + 1
不太正确,理想情况下,您应该在以下现有子(和孙子)选项卡之后插入新选项卡parentTab
:
function addBackgroundChildTab(url, parentTab) {
chrome.tabs.query({'windowId': parentTab.windowId}, function(tabs) {
var parentAndDescendentIds = {};
parentAndDescendentIds[parentTab.id] = true;
var nextIndex = parentTab.index + 1;
while (nextIndex < tabs.length) {
var tab = tabs[nextIndex];
if (tab.openerTabId in parentAndDescendentIds) {
parentAndDescendentIds[tab.id] = true;
nextIndex++;
} else {
break;
}
}
chrome.tabs.create({
'url': url,
'active': false,
'windowId': parentTab.windowId,
'index': nextIndex,
'openerTabId': parentTab.id
});
});
}
但这对于您的目的可能有点过头了,在这种情况下,坚持parentTab.index + 1
我的第一个代码示例应该没问题。