userScripts.execute()

將使用者指令碼注入到目標上下文(例如,標籤頁或框架)中。

注意: 預設情況下,注入的指令碼在 document_idle 時執行,或者在頁面載入完成後立即執行。如果將 injectImmediately 屬性設定為 true,指令碼將立即注入,無需等待,即使頁面仍在載入。

語法

js
let executeUserScript = browser.userScripts.execute(
  injection, // array of objects
);

引數

injection

一個物件陣列,指定要注入哪些使用者指令碼、在何處注入以及如何注入。

injectImmediately 可選

boolean。如果設定為 true,則儘快在目標上下文中觸發注入。這並不能保證注入發生在頁面載入完成之前,因為頁面可能在指令碼到達目標之前就已載入。

js

array of userScripts.ScriptSource。要注入到匹配頁面的指令碼。

目標

一個定義指令碼注入到的目標上下文的物件。

allFrames 可選

boolean。如果設定為 true,指令碼將注入到所有可用的框架中。預設為 false,此時指令碼僅注入到頂級框架。

documentIds 可選

array of string。要注入到的文件的 ID。如果設定了 frameIds,則不得指定此項。

frameIds 可選

array of integer。要注入到的框架的 ID。如果設定了 documentIds,則不得指定此項。

tabId

integer。要注入到的標籤頁的 ID。

world 可選

userScripts.ExecutionWorld。用於執行指令碼的執行環境。預設為 "USER_SCRIPT"

worldId 可選

string。指令碼執行所在的使用者指令碼世界的 ID。僅在 worldUSER_SCRIPT 或省略時有效。如果省略 worldId,指令碼將在預設的 USER_SCRIPT 世界("")中執行。帶有下劃線(_)字首的值是保留的。最大長度為 256 個字元。一個世界可以被多個指令碼用作其執行環境。要配置世界的行為,請在第一個指令碼在該世界中執行之前,將其 worldId 傳遞給 userScripts.configureWorld

返回值

一個 Promise,成功後會 fulfilled 一個物件陣列,描述注入的結果,這些物件具有以下屬性:

documentId

string。與注入關聯的文件 ID。

error 可選

string。任何錯誤訊息。此項與 result 互斥。

frameId

integer。與注入關聯的框架 ID。

result 可選

string。任何指令碼注入的結果。此項與 error 互斥。

示例

js
await browser.userScripts.execute([
  {
    js: [{ code: "console.log('Hello world!');" }],
    target: { tabId: 1 },
  },
]);

瀏覽器相容性