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 },
  },
]);

浏览器兼容性