userScripts

使用此 API 注册用户脚本,即那些设计用于操作网页或提供新特性的第三方脚本。注册用户脚本会指示浏览器将脚本附加到与注册期间指定的 URL 模式匹配的页面上。

备注: 本文档针对新版 API 编写,适用于 Firefox Manifest V3 版本。参见 userScripts(旧版)以获取有关可用于 Firefox Manifest V2 的 API。

此 API 提供类似 scripting 的功能,但包含一些专为处理第三方脚本而设计的特性。

权限

要使用此 API,你需要 userScripts 权限以及你想要运行脚本的站点的 host_permissions。但是,允许使用此 API 的方法因浏览器而异:

运行环境

当用户脚本被注册或更新(使用 userScripts.register()userScripts.update())时,你的扩展可以将其设置为在隔离的 USER_SCRIPT 环境(world)或 MAIN 环境中运行。

USER_SCRIPT 环境提供了隔离的运行环境,无法访问宿主页面和其他扩展。这种隔离与内容脚本环境类似,除了 USER_SCRIPT 环境不能访问扩展 API。

用户脚本可以共享 USER_SCRIPT 环境,也可以通过设置 RegisteredUserScriptworldId 属性将自己隔离在 USER_SCRIPT 环境中。此 API 允许扩展使用 userScripts.configureWorld() 配置 USER_SCRIPT 环境的内容安全策略(CSP)。

MAIN 环境中,宿主页面和其他扩展可以访问正在运行的用户脚本。MAIN 环境不支持 worldId 属性。

这些执行环境的值定义于 ExecutionWorld 中。

消息

与内容脚本和其他扩展脚本类似,用户脚本通过 runtime.sendMessage()runtime.connect() 使用消息来与扩展的其他部分通信。但是,扩展使用专用的 runtime.onUserScriptMessageruntime.onUserScriptConnect 来接收消息。专用的处理器使得来自用户脚本(更不受信的上下文)的消息更易被识别。

要启用消息 API,在注册用户脚本之前,请调用 userScripts.configureWorld() 并将 messaging 参数设置为 true

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()

更新由扩展注册的用户脚本。

示例扩展

浏览器兼容性

BCD tables only load in the browser

参见