scripting.insertCSS()

将 CSS 注入页面。

注意:此方法在 Chrome 的 Manifest V3 或更高版本以及 Firefox 101 中可用。在 Safari 和 Firefox 102+ 中,此方法在 Manifest V2 中也可用。

要使用此 API,您必须拥有 "scripting" 权限以及目标 URL 的权限,该权限可以显式地作为 主机权限,也可以使用 activeTab 权限

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

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

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

这是一个异步函数,返回一个 Promise

语法

js
await browser.scripting.insertCSS(
  details     // object
)

参数

details

一个描述要插入的 CSS 及其插入位置的对象。它包含以下属性:

css 可选

string。一个包含要注入的 CSS 的字符串。必须指定 cssfiles 其中之一。

files 可选

array of string。要注入的 CSS 文件的路径,相对于扩展的根目录。必须指定 filescss 其中之一。

origin 可选

string。注入的样式来源,可以是 USER,用于将 CSS 添加为用户样式表,或 AUTHOR,用于将其添加为作者样式表。默认为 AUTHOR。从 Firefox 144 开始,此属性不区分大小写。

  • USER 使您能够阻止网站覆盖您插入的 CSS:请参阅 层叠顺序
  • AUTHOR 样式表表现得好像它们出现在网页指定的任何作者规则之后。此行为包括页面脚本动态添加的任何作者样式表,即使该添加发生在 insertCSS 调用完成之后。
目标

scripting.InjectionTarget。指定要将 CSS 注入目标(的详细信息)。

返回值

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

示例

此示例将从字符串中获取的 CSS 注入到活动标签页中。

js
browser.action.onClicked.addListener(async (tab) => {
  try {
    await browser.scripting.insertCSS({
      target: {
        tabId: tab.id,
      },
      css: `body { border: 20px dotted pink; }`,
    });
  } catch (err) {
    console.error(`failed to insert CSS: ${err}`);
  }
});

此示例注入从文件中加载的 CSS(与扩展打包在一起),该文件名为 "content-style.css"

js
browser.action.onClicked.addListener(async (tab) => {
  try {
    await browser.scripting.insertCSS({
      target: {
        tabId: tab.id,
      },
      files: ["content-style.css"],
    });
  } catch (err) {
    console.error(`failed to insert CSS: ${err}`);
  }
});

浏览器兼容性

注意: 此 API 基于 Chromium 的 chrome.scripting API。