tabs.moveInSuccession()
修改一组选项卡的继承关系。
使用tabs
API,可以在同一窗口中为选项卡分配一个后继选项卡。如果选项卡 B 是选项卡 A 的后继,并且选项卡 A 在处于活动状态时关闭,则选项卡 B 将接下来被激活。如果选项卡 A 没有后继,则浏览器可以自由决定激活哪个选项卡。如果选项卡 B 是选项卡 A 的后继,则选项卡 A 被称为选项卡 B 的前驱。一个选项卡最多只能有一个后继,但可以有多个前驱。一个选项卡不能将自身或不同窗口中的选项卡作为后继。
所有选项卡最初都没有后继;只有 WebExtension 分配后继时,选项卡才会获得后继。但是,如果可能,浏览器不能使与其他选项卡具有继承关系的选项卡成为孤儿:如果选项卡 B 是选项卡 A 的后继,而选项卡 C 是选项卡 B 的后继,并且 B 关闭(或移动到另一个窗口),则选项卡 A 将把选项卡 C 作为其后继。以这种方式防止 C 成为孤儿称为移动选项卡 (B) 使其脱离继承链。
tabs.moveInSuccession()
获取一个选项卡 ID 数组,并将所有这些选项卡从其继承链中移除。然后,它使每个选项卡成为数组中前一个选项卡的后继,从而形成一个链。它可以选择将链中最后一个选项卡的后继设置为锚选项卡,该选项卡不会从其继承链中移除。其他选项可以控制选项卡链是在锚选项卡之前“预置”还是之后“追加”,以及操作是否像链接列表插入。
虽然可以使用tabs.update()
分配后继选项卡,但通常希望使用tabs.moveInSuccession()
更改后继,即使只有一个选项卡正在分配其后继。不同之处在于browser.tabs.moveInSuccession([a], b)
将选项卡a
从其继承链中移除,因此a
的任何前驱都将采用a
之前的后继;而如果改为使用browser.tabs.update(a, {successorTabId: b})
,则选项卡a
可能仍将是其他选项卡的后继,这可能是意料之外的。tabs.moveInSuccession()
的另一个优点是,所有继承更改都以原子方式发生,无需担心在对tabs.update()
和tabs.get()
以及用户关闭选项卡等其他操作之间进行竞争。
语法
browser.tabs.moveInSuccession([1, 3, 5, 7, 2, 9], 4, {insert:true})
参数
tabIds
-
integer
的array
。选项卡ID
的数组。数组中元素的顺序定义了选项卡之间的关系。任何无效的选项卡ID
或对应于与tabId
(如果省略tabId
,则为数组中的第一个选项卡)不在同一窗口中的选项卡的选项卡ID
都将被忽略——它们将保留其当前的后继和前驱。 tabId
可选-
integer
。将成为tabIds
数组中最后一个选项卡的后继的选项卡的ID
。如果此ID
无效或为tabs.TAB_ID_NONE
,则最后一个选项卡将没有后继。默认为tabs.TAB_ID_NONE
。 options
可选-
对象
.append
可选-
boolean
。确定是在继承关系中将tabIds
中的选项卡移动到tabId
之前还是之后。如果为false
,则选项卡将移动到tabId
之前,如果为true
,则选项卡将移动到tabId
之后。默认为false
。 insert
可选-
boolean
。确定在预置或追加后是否将tabId
的当前前驱或后继(取决于options.append
)链接到链的另一侧。如果为真,则会发生以下情况之一:如果options.append
为false
,则将数组中的第一个选项卡设置为tabId
的任何当前前驱的后继;如果options.append
为true
,则将tabId
的当前后继设置为数组中最后一个选项卡的后继。默认为false
。
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。