不能依赖chrome.tabs.move中的索引

时间:2015-06-16 19:16:01

标签: javascript google-chrome-extension tabs

我有这样的标签:

  • 标签A
  • tab B
  • tab C
  • 标签D
  • 标签E

标签C后移动标签A 我使用

chrome.tabs.move(tabA.id, {'index': tabC.index+1});

但我在标签D 之后得到它 如果我在列表中向下移动任何选项卡,它可以正常工作,但如果" upper"选项卡向下移动,索引变得混乱(上部选项卡从索引列表中删除,目标索引下降1) 我是否需要以某种方式比较移动的标签索引和目标索引,并根据该计算结果索引(如果A< C)或更容易解决此问题?

3 个答案:

答案 0 :(得分:1)

我也有使用Chrome API的一些经验,如果我学到了一件事,那就是API就像它一样行事。
如果在插入当前选项之前将新索引分配给选项卡,但是在删除它之后,那就是那个。 最好像你建议的那样选择支票:

function moveAfter(what, target)
{
    target = (typeof target === 'number' target : target.index) + 1;
    if(what.constructor === Array.prototype.constructor)
    {
        var w = [];
        var t = target;
        for(var i = 0; i < what.length)
        {
            if(what[i].index < target)
            {
                t--;
            }
            w.push(what[i].id);
        }
        what = w;
        target = t;
    }
    else
    {
        if(what.index < target)
        {
            target--;
        }
        what = what.id;
    }
    chrome.tabs.move(what, {index: target});
}

what可以是Tab个对象,也可以是Tab个数组 target可以是Tab对象或制表符索引(不含+1)。

答案 1 :(得分:1)

这就是我最终的结果:
我有一个名为移动的数组,其中有对象

auth.requestedScopes = @[SPTAuthStreamingScope, SPTAuthPlaylistModifyPublicScope];

我可以在移动开始时为用户操作设置我想要的任何内容,因此我收集了ID和索引

在我的移动标签应该去的目标标签上(之后)我有这个:

moved = [{id, index}, {id, index}.....]

它实际上非常简单并且工作正常

答案 2 :(得分:0)

  

我在标签D之后得到它

这是因为您尝试移至tabC.index+1(即4),然后移除标签A,结果为B, C, D, E并移至索引4,结果为B, C, D, A, E,即D后的A这有意义吗?

因此,如果您希望在标签C之后移动的标签位于标签C之前,则不要使用+1位,否则您应该使用它。