contentScripts.register()

使用此函数来注册一个或多个内容脚本。

它接受一个参数,该参数是一个对象,其属性与 content_scripts manifest 键中提供的对象相似(但请注意,content_scripts 是一个对象数组,而 register() 的参数是一个对象)。

扩展必须具有 contentScriptOptions 中模式的适当 主机权限,否则 API 调用将被拒绝。

语法

js
let registering = browser.contentScripts.register(
  contentScriptOptions       // object
)

参数

contentScriptOptions

object。一个 RegisteredContentScriptOptions 对象,表示要注册的内容脚本。其语法与 content_scripts manifest 键数组中的对象相似。区别在于:

  • 属性名使用 驼峰式命名,而不是下划线(蛇形命名)— 例如,excludeMatches,而不是 exclude_matches
  • jscss 属性允许你注册字符串以及 URL,因此它们的语法必须区分这些类型。

RegisteredContentScriptOptions 对象具有以下属性:

allFrames 可选

content_scripts 键中的 all_frames 相同。

cookieStoreId 可选

一个字符串或字符串数组。在属于一个或多个 cookie 存储 ID 的标签页中注册内容脚本。这使得脚本可以为所有默认或非情境身份标签页、私密浏览标签页(如果 扩展在私密浏览中启用)、情境身份 的标签页,或这些的组合进行注册。有关更多信息,请参阅 处理情境身份

css 可选

一个对象数组。每个对象都有一个名为 file 的属性,该属性是一个以扩展的 manifest.json 开始并指向要注册的 CSS 文件的 URL,或者有一个名为 code 的属性,该属性是要注册的 CSS 代码。

cssOrigin 可选

string。注入样式的来源,可以是 "user",将 CSS 添加为用户样式表,或者 "author",将其添加为作者样式表。默认为 "author"。此属性不区分大小写。

excludeGlobs 可选

content_scripts 键中的 exclude_globs 相同。

excludeMatches 可选

content_scripts 键中的 exclude_matches 相同。

includeGlobs 可选

content_scripts 键中的 include_globs 相同。

js 可选

一个对象数组。每个对象都有一个名为 file 的属性,该属性是一个以扩展的 manifest.json 开始并指向要注册的 JavaScript 文件的 URL,或者有一个名为 code 的属性,该属性是要注册的 JavaScript 代码。

matchAboutBlank 可选

content_scripts 键中的 match_about_blank 相同。

matchOriginAsFallback 可选

content_scripts 键中的 match_origin_as_fallback 相同。

matches

content_scripts 键中的 matches 相同。

runAt 可选

content_scripts 键中的 run_at 相同。

world 可选

脚本执行的环境。与 content_scripts 键中的 world 相同。

返回值

一个 Promise,它将用一个 contentScripts.RegisteredContentScript 对象fulfilled,你可以使用该对象来取消注册内容脚本。

目前,当相关的扩展页面(从中注册了内容脚本)卸载时,内容脚本就会被取消注册,因此你应该从一个持续时间至少与你希望内容脚本保持注册状态一样长的扩展页面注册内容脚本。

示例

此示例为所有 .org URL 注册了 defaultCode 内容脚本。

js
const defaultHosts = "*://*.org/*";
const defaultCode =
  "document.body.innerHTML = '<h1>This page has been eaten<h1>'";

async function register(hosts, code) {
  return await browser.contentScripts.register({
    matches: [hosts],
    js: [{ code }],
    runAt: "document_idle",
  });
}

let registered = register(defaultHosts, defaultCode);

此代码注册了 content_scripts/example.js 文件。

js
const scriptObj = await browser.contentScripts.register({
  js: [{ file: "/content_scripts/example.js" }],
  matches: ["<all_urls>"],
  allFrames: true,
  runAt: "document_start",
});

扩展程序示例

浏览器兼容性