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。