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.org.cn

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.org.cn" });
updating.then(onUpdated, onError);

激活当前窗口中的第一个标签页,并将其导航到 https://mdn.org.cn

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.org.cn",
  });
  updating.then(onUpdated, onError);
}

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

扩展程序示例

浏览器兼容性

注意:此 API 基于 Chromium 的 chrome.tabs API。本文档源自 Chromium 代码中的 tabs.json