4

我正在开发一个 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': idchrome.tabs.create,结果相同。我不知道我该如何解决这个问题。有谁能够帮助我?

4

2 回答 2

7

听起来您正在创建一个“子”选项卡,在这种情况下,您应该同时设置 theindexopenerTabId

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

于 2015-01-06T22:14:14.123 回答
3

该选项卡附加在末尾,因为您使用了错误的参数(id应该是index)。选项卡 id是一个正整数,它唯一地标识会话中的选项卡。因此, 的值id始终高于选项卡的数量。

选项卡的位置可以从index属性中读取。所以,替换idindex

function clickEvent(info, tab) {
    update();
    var url = "http://google.com/";
    var index = tab.index + 1;
    chrome.tabs.create({'url': url, 'index': index});
}
于 2012-11-30T19:17:50.477 回答