如何在当前标签之后打开新标签?

时间:2012-11-30 19:03:15

标签: google-chrome google-chrome-extension

我正在开发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后,结果相同。我不知道如何解决问题。有人能帮助我吗?

2 个答案:

答案 0 :(得分:6)

听起来你正在创造一个“孩子”。选项卡,在这种情况下,您应同时设置indexopenerTabId

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就像在我的第一个代码示例中一样应该没问题。

答案 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});
}