這聽起來像你正在創建一個 '孩子' 選項卡,在這種情況下,你應該同時設置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
堅持作爲我的第一個代碼示例中應該罰款。