tabs.insertCSS()

将 CSS 注入页面。

注意: 使用 Manifest V3 或更高版本时,请使用 scripting.insertCSS()scripting.removeCSS() 来插入和移除 CSS。

要使用此 API,您必须拥有目标页面 URL 的权限,该权限可以是显式指定的 主机权限,也可以是 activeTab 权限

您只能将 CSS 注入到可以使用 匹配模式 表达的 URL 的页面中:这意味着,它的协议必须是 "http"、"https" 或 "file" 之一。因此,您无法将 CSS 注入到任何浏览器内置页面,例如 about:debugging、about:addons,或打开新空标签页时显示的页面。

注意: Firefox 会将注入的 CSS 文件中的 URL 解析为相对于 CSS 文件本身,而不是相对于注入到的页面。

插入的 CSS 可以通过调用 tabs.removeCSS() 来移除。

这是一个异步函数,它会返回一个 Promise(仅在 Firefox 中)。

语法

js
let inserting = browser.tabs.insertCSS(
  tabId,           // optional integer
  details          // object
)

参数

tabId 可选

integer。插入 CSS 的标签页的 ID。默认为当前窗口的活动标签页。

details

描述要插入的 CSS 的对象。它包含以下属性:

allFrames 可选

boolean。如果为 true,CSS 将被注入到当前页面的所有帧中。如果为 false,CSS 只注入到顶层帧。默认为 false

code 可选

string。要注入的代码,以文本字符串形式表示。

cssOrigin 可选

string。它可以取以下两个值之一:“user”,用于将 CSS 添加为用户样式表;或“author”,用于将其添加为作者样式表。如果省略此选项,CSS 将作为作者样式表添加。

  • “user”可以防止网站覆盖您插入的 CSS:参见 层叠顺序
  • “author”样式表表现得就像它们出现在网页指定的任何作者规则之后。这种行为包括由页面脚本动态添加的任何作者样式表,即使该添加发生在 insertCSS 调用完成之后。
file 可选

string。包含要注入代码的文件的路径。在 Firefox 中,相对 URL 相对于当前页面 URL 进行解析。在 Chrome 中,这些 URL 相对于扩展程序的基 URL 进行解析。为了跨浏览器兼容,您可以将路径指定为绝对 URL,从扩展程序的根目录开始,如下所示:"/path/to/stylesheet.css"

frameId 可选

integer。应注入 CSS 的帧。默认为 0(顶层帧)。

matchAboutBlank 可选

boolean。如果为 true,代码将被注入到嵌入的 "about:blank" 和 "about:srcdoc" 帧中,前提是您的扩展程序有权访问它们的父文档。代码无法插入到顶层的 about: 帧中。默认为 false

runAt 可选

extensionTypes.RunAt。代码将被注入到标签页的最早时间。默认为 "document_idle"。

返回值

一个 Promise,当所有 CSS 都已插入时,它将以无参数的形式完成。如果发生任何错误,Promise 将以错误消息被拒绝。

示例

此示例将 CSS 从字符串插入到当前活动标签页。

js
let css = "body { border: 20px dotted pink; }";

browser.browserAction.onClicked.addListener(() => {
  function onError(error) {
    console.log(`Error: ${error}`);
  }

  let insertingCSS = browser.tabs.insertCSS({ code: css });
  insertingCSS.then(null, onError);
});

此示例将 CSS 从扩展程序打包的文件中加载并插入。CSS 将插入到 ID 为 2 的标签页中。

js
browser.browserAction.onClicked.addListener(() => {
  function onError(error) {
    console.log(`Error: ${error}`);
  }

  let insertingCSS = browser.tabs.insertCSS(2, { file: "content-style.css" });
  insertingCSS.then(null, onError);
});

扩展程序示例

浏览器兼容性

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