userScripts

使用此 API 註冊使用者指令碼,這些使用者指令碼是用於操作網頁或提供新功能的第三方指令碼。註冊使用者指令碼會指示瀏覽器將指令碼附加到在註冊期間指定的 URL 模式匹配的頁面。

注意:這是新 API 版本的文件,在 Firefox 中適用於 Manifest V3。有關在 Firefox 中使用 Manifest V2 的 API 資訊,請參閱 userScripts (舊版)

此 API 提供了與 scripting 類似的功能,但增加了適合處理第三方指令碼的功能。

Permissions

要使用此 API,您需要 `userScripts` 許可權以及您希望執行指令碼的網站的 host_permissions。但是,啟用此 API 的方法在不同瀏覽器之間有所不同。

執行環境

當用戶指令碼被註冊或更新時(使用 userScripts.register()userScripts.update()),您的擴充套件可以將其設定為在隔離的 `USER_SCRIPT` 環境或 `MAIN` 環境中執行。

`USER_SCRIPT` 環境提供了一個隔離的執行環境,主機頁面或其他擴充套件無法訪問。這種隔離類似於 內容指令碼環境,只是 `USER_SCRIPT` 環境無法訪問擴充套件 API。

使用者指令碼可以透過設定 RegisteredUserScript 的 `worldId` 屬性來共享 `USER_SCRIPT` 環境,或將其自身隔離在 `USER_SCRIPT` 環境中。該 API 使擴充套件能夠使用 userScripts.configureWorld() 為 `USER_SCRIPT` 環境配置內容安全策略 (CSP)。

在 `MAIN` 環境中,主機頁面和其他擴充套件可以看到並訪問正在執行的使用者指令碼。`worldId` 屬性不適用於 `MAIN` 環境。

這些執行環境值定義在 ExecutionWorld 中。

訊息

像內容指令碼和其他擴充套件指令碼一樣,使用者指令碼使用訊息與擴充套件的其他部分進行通訊,使用 runtime.sendMessage()runtime.connect()。但是,擴充套件使用專用的 runtime.onUserScriptMessageruntime.onUserScriptConnect 來接收訊息。使用專用處理程式是因為它們更容易識別來自使用者指令碼的訊息,而使用者指令碼是信任度較低的上下文。

要啟用訊息傳遞 API,請在註冊使用者指令碼之前,使用 `messaging` 引數設定為 `true` 呼叫 userScripts.configureWorld()

js
browser.userScripts.configureWorld({
  messaging: true,
});

擴充套件更新

當擴充套件更新時,使用者指令碼會被清除。要恢復指令碼,請在擴充套件的 runtime.onInstalled 事件處理程式中新增響應 `"update"` 原因的程式碼。

型別

userScripts.ExecutionWorld

使用 userScripts.register()userScripts.update() 注入指令碼的執行環境。

userScripts.RegisteredUserScript

getScripts() 返回的 `object`,表示已註冊的使用者指令碼,並用作 register()update() 的輸入。

userScripts.ScriptSource

使用者指令碼的程式碼或檔案源。

userScripts.UserScriptFilter

userScripts.getScripts()userScripts.unregister() 處理的使用者指令碼列表。

userScripts.WorldProperties

`USER_SCRIPT` 執行環境的配置。

方法

userScripts.configureWorld()

為擴充套件配置 `USER_SCRIPT` 執行環境。

userScripts.getScripts()

返回擴充套件註冊的使用者指令碼。

userScripts.getWorldConfigurations()

返回擴充套件註冊的所有環境配置。

userScripts.register()

為擴充套件註冊使用者指令碼。

userScripts.resetWorldConfiguration()

重置擴充套件註冊的 `USER_SCRIPT` 環境的配置。

userScripts.unregister()

取消註冊擴充套件註冊的使用者指令碼。

userScripts.update()

更新擴充套件註冊的使用者指令碼。

userScripts.execute()

將使用者指令碼注入目標上下文。

擴充套件程式示例

瀏覽器相容性

另見