这听起来像你正在创建一个 '孩子' 选项卡,在这种情况下,你应该同时设置index
和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
表示新选项卡将作为父标签的子选项卡正确关联,因此:
- 如果您在子选项卡处于活动状态时关闭它,则父选项卡将成为活动选项卡(而不是称为子选项卡右侧的选项卡)。这使其行为与用户在新选项卡中打开的链接的行为相同。
- 在树中显示选项卡的扩展程序will work properly。
另请参阅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
坚持作为我的第一个代码示例中应该罚款。