我正在开发Chrome扩展程序,我想打开一个新标签,但是在用户所在的当前标签之后。这就是我试图做的事情:
function clickEvent(info, tab) {
update();
var url= "http://google.com";
var id = tab.id+1;
chrome.tabs.create({'url': url, 'index': id});
}
但创建的选项卡会在chrome标签栏的标签队列末尾打开。从'index': id
中删除chrome.tabs.create
后,结果相同。我不知道如何解决问题。有人能帮助我吗?
答案 0 :(得分:6)
听起来你正在创造一个“孩子”。选项卡,在这种情况下,您应同时设置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
表示新选项卡将正确关联为父选项卡的子选项卡,因此:
另请参阅添加此内容的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
就像在我的第一个代码示例中一样应该没问题。
答案 1 :(得分:3)
最后附加了标签,因为您使用了错误的参数(id
应为index
)。 tab id
是一个正整数,用于唯一标识会话中的选项卡。因此,id
的值始终高于制表符的数量。
可以从index
属性中读取选项卡的位置。因此,请将id
替换为index
:
function clickEvent(info, tab) {
update();
var url = "http://google.com/";
var index = tab.index + 1;
chrome.tabs.create({'url': url, 'index': index});
}