tabs.update()

將標籤頁導航到新的 URL,或修改標籤頁的其他屬性。

要使用此函式,請傳入要更新的標籤頁的 ID,以及一個包含您要更新的屬性的 updateProperties 物件。如果在 updateProperties 中未指定的屬性將不會被修改。

這是一個非同步函式,返回一個 Promise

語法

js
let updating = browser.tabs.update(
  tabId,              // optional integer
  updateProperties    // object
)

引數

tabId 可選

integer。預設為當前視窗的已選標籤頁。

updateProperties

object。要為此標籤頁更新的屬性集。有關這些屬性的更多資訊,請參閱 tabs.Tab 文件。

active 可選

boolean。標籤頁是否應變為活動狀態。不影響視窗是否獲得焦點(請參閱 windows.update)。如果為 true,則未被啟用的高亮標籤頁將停止高亮。如果為 false,則不做任何操作。

autoDiscardable 可選

boolean。標籤頁是否可以被瀏覽器丟棄。預設值為 true。當設定為 false 時,瀏覽器無法自動丟棄該標籤頁。但是,該標籤頁可以透過 tabs.discard 進行丟棄。

highlighted 可選

boolean。將標籤頁新增到當前選擇中或從中移除。如果為 true 且該標籤頁未被高亮,則預設它將變為活動狀態。

如果您只想高亮標籤頁而不啟用它,Firefox 支援將 highlighted 設定為 true 並將 active 設定為 false。其他瀏覽器在這種情況下也可能會啟用該標籤頁。

loadReplace 可選

boolean。新的 URL 是否應替換標籤頁的導航歷史中舊的 URL,透過“後退”按鈕訪問。 (例如,使用者建立新標籤頁時,按下 Ctrl+T。預設情況下,在 Firefox 中,這將載入“about:newtab”。如果您的擴充套件程式隨後使用 tabs.update 更新此頁面,而不設定 loadReplace,則“後退”按鈕將啟用,並將使用者帶回到“about:newtab”。如果擴充套件程式設定了 loadReplace,則“後退”按鈕將被停用,並且就像該標籤頁訪問的第一個頁面是由擴充套件程式提供的 URL 一樣。)

例如,假設使用者使用 Ctrl+T 建立了一個新標籤頁。預設情況下,在 Firefox 中,這將載入 "about:newtab"。如果您的擴充套件程式隨後使用 tabs.update 更新此頁面,而不設定 loadReplace,則“後退”按鈕將啟用,並且它將使使用者返回到 "about:newtab"。如果擴充套件程式設定了 loadReplace,則“後退”按鈕將被停用,並且就好像擴充套件程式提供的 URL 是該標籤頁中訪問的第一個頁面一樣。

請注意,原始 URL 仍將出現在瀏覽器的全域性歷史記錄中。

muted 可選

boolean。標籤頁是否應被靜音。

openerTabId 可選

integer。開啟此標籤頁的標籤頁的 ID。如果指定,則開啟者標籤頁必須與此標籤頁在同一視窗中。設定為 -1 以清除已設定的 openerTabId

pinned 可選

boolean。標籤頁是否應被固定。

selected 已棄用 可選

boolean。標籤頁是否應被選中。此屬性已被 activehighlighted 替換。

successorTabId 可選

integer。標籤頁的後繼標籤頁 ID。

url 可選

string。要將標籤頁導航到的 URL。

出於安全原因,在 Firefox 中,這可能不是一個特權 URL。因此,傳遞以下任何 URL 都將失敗,並且 runtime.lastError 將設定為錯誤訊息:

  • chrome: URL
  • javascript: URL
  • data: URL
  • file: URL(即檔案系統上的檔案。但是,要使用打包在擴充套件程式內的檔案,請參閱下文)
  • 特權的 about: URL(例如,about:configabout:addonsabout:debuggingabout:newtab)。非特權的 URL(例如 about:blank)是允許的。

要載入與您的擴充套件程式打包在一起的頁面,請指定一個以擴充套件程式的 manifest.json 檔案開頭的絕對 URL。例如:'/path/to/my-page.html'。如果省略前導的 '/',URL 將被視為相對 URL,不同的瀏覽器可能會構造不同的絕對 URL。

返回值

一個 Promise,它將以一個包含已更新標籤頁詳細資訊的 tabs.Tab 物件來 fulfilled。除非請求了匹配的 host permissions"tabs" 許可權,否則 tabs.Tab 物件不包含 urltitlefavIconUrl。如果找不到該標籤頁或發生其他錯誤,Promise 將以錯誤訊息被 rejected。

示例

將當前視窗中的活動標籤頁導航到 https://mdn.club.tw

js
function onUpdated(tab) {
  console.log(`Updated tab: ${tab.id}`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

let updating = browser.tabs.update({ url: "https://mdn.club.tw" });
updating.then(onUpdated, onError);

啟用當前視窗中的第一個標籤頁,並將其導航到 https://mdn.club.tw

js
function onUpdated(tab) {
  console.log(`Updated tab: ${tab.id}`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

function updateFirstTab(tabs) {
  let updating = browser.tabs.update(tabs[0].id, {
    active: true,
    url: "https://mdn.club.tw",
  });
  updating.then(onUpdated, onError);
}

let querying = browser.tabs.query({ currentWindow: true });
querying.then(updateFirstTab, onError);

擴充套件程式示例

瀏覽器相容性

注意:此 API 基於 Chromium 的 chrome.tabs API。本文件源自 Chromium 程式碼中的 tabs.json