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-
arrayofinteger。標籤頁ID的陣列。陣列元素的順序決定了標籤頁之間的關係。任何無效的標籤頁ID,或與不在tabId所在視窗中的標籤頁(或如果省略tabId,則為陣列中的第一個標籤頁)對應的標籤頁ID,都將被忽略——它們將保留其當前的後繼和前驅。 tabId可選-
integer。將成為tabIds陣列中最後一個標籤頁的後繼的標籤頁的ID。如果此ID無效或為tabs.TAB_ID_NONE,則最後一個標籤頁將沒有後繼。預設為tabs.TAB_ID_NONE。 options可選-
object.append可選-
boolean。確定是在tabId的繼承鏈之前還是之後移動tabIds中的標籤頁。如果為false,則在tabId之前移動標籤頁;如果為true,則在tabId之後移動標籤頁。預設為false。 insert可選-
boolean。確定在將tabId的當前前驅或後繼(取決於options.append)連結到鏈的另一側後,是否將其重新連結。如果為 true,則會發生以下情況之一:如果options.append為false,則陣列中的第一個標籤頁將成為tabId的任何當前前驅的後繼;如果options.append為true,則tabId的當前後繼將成為陣列中最後一個標籤頁的後繼。預設為false。
瀏覽器相容性
載入中…