content_scripts

类型 数组
必填
清单版本 2 或更高版本
示例
json
"content_scripts": [
  {
    "matches": ["*://*.mozilla.org/*"],
    "js": ["borderify.js"]
  }
]

指示浏览器将 内容脚本 加载到其 URL 与给定模式匹配的网页中。

此键是一个数组。每个项目都是一个对象,该对象

  • **必须**包含一个名为**matches**的键,该键指定要匹配的 URL 模式,以便加载脚本;
  • **可以**包含名为**js**和**css**的键,这些键列出要加载到匹配页面中的脚本和/或样式表;以及
  • **可以**包含许多其他属性,这些属性控制内容脚本加载方式和时间的更精细方面。

可以在下表中找到可以包含的所有键的详细信息。

名称 类型 描述
all_frames 布尔值
true

jscss中指定的脚本注入到与指定的 URL 要求匹配的所有框架中,即使该框架不是选项卡中的最顶层框架。这不会注入到仅其父级匹配 URL 要求且子级框架不匹配 URL 要求的子级框架中。对每个框架独立检查 URL 要求。

注意:这也适用于使用 iframe 的任何跟踪器或广告,这意味着启用此功能可能会导致您的内容脚本在某些页面上被调用数十次。

false
仅注入到与 URL 要求匹配且是选项卡中最顶层框架的框架中。

默认为false

css 数组

相对于manifest.json的路径数组,引用将注入到匹配页面的 CSS 文件。

文件按给定的顺序注入,并在run_at指定的时间注入。

注意:Firefox 会解析注入的 CSS 文件中相对于 CSS 文件本身的 URL,而不是相对于其注入到的页面。

exclude_globs 数组 包含通配符的字符串数组。请参阅下面的匹配 URL 模式
exclude_matches 数组 匹配模式数组。请参阅下面的匹配 URL 模式
include_globs 数组 包含通配符的字符串数组。请参阅下面的匹配 URL 模式
js 数组

相对于manifest.json的路径数组,引用将注入到匹配页面的 JavaScript 文件。

文件按给定的顺序注入。这意味着,例如,如果您在此处包含 jQuery,然后是另一个内容脚本,如下所示

json
"js": ["jquery.js", "my-content-script.js"]

然后,"my-content-script.js"可以使用 jQuery。

这些文件在css中的任何文件之后注入,并在run_at指定的时间注入。

match_about_blank 布尔值

如果打开或创建此页面的页面的 URLcontent_scripts键中其余部分指定的模式匹配,则将内容脚本插入到 URL 为"about:blank""about:srcdoc"的页面中。

这对于在 URL 为"about:blank"的空 iframe 中运行脚本特别有用。为此,您还应该设置all_frames键。

例如,假设您有一个类似于以下内容的content_scripts

json
  "content_scripts": [
    {
      "js": ["my-script.js"],
      "matches": ["https://example.org/"],
      "match_about_blank": true,
      "all_frames": true
    }
  ]

如果用户加载https://example.org/,并且此页面嵌入了一个空 iframe,则"my-script.js"将加载到 iframe 中。

注意:从 Firefox 52 版本开始支持match_about_blank

请注意,在 Firefox 中,即使您在run_at中指定该值,内容脚本也不会注入到"document_start"处的空 iframe 中。

match_origin_as_fallback 布尔值 true时,当其来源与matches中的模式匹配时,代码将注入到about:data:blob:页面中,即使文档来源不透明(由于使用 CSP 或 iframe 沙箱)。matches中的匹配模式必须指定通配符路径 glob。默认为false
matches 数组

匹配模式数组。请参阅下面的匹配 URL 模式

这是唯一必填键。

run_at 字符串

此选项确定何时注入cssjs中指定的文件。您可以在此处提供三个字符串之一,每个字符串都标识加载文档过程中的一个状态。这些状态直接对应于Document.readyState

"document_start"
对应于loading。DOM 仍在加载。
"document_end"
对应于interactive。DOM 已完成加载,但脚本和图像等资源可能仍在加载。
"document_idle"
对应于complete。文档及其所有资源都已完成加载。

默认值为"document_idle"

在所有情况下,js中的文件都将在css中的文件之后注入。

world 字符串

脚本在其执行的 JavaScript 世界中。

"ISOLATED"
默认的内容脚本执行环境。此环境与页面的上下文隔离:虽然它们共享相同的文档,但全局作用域和可用 API 不同。
"MAIN"
网页的执行环境。此环境与网页共享,没有隔离。此环境中的脚本无法访问仅供内容脚本使用的任何 API。

警告:由于缺乏隔离,网页可以检测并干扰执行的代码。除非网页可以读取、访问或修改通过执行的代码流动的逻辑或数据是可以接受的,否则不要使用MAIN世界。

默认值为"ISOLATED"

匹配 URL 模式

"content_scripts"键根据 URL 匹配将内容脚本附加到文档:如果文档的 URL 与键中的规范匹配,则将附加脚本。"content_scripts"中有四个属性可用于此规范

matches

匹配模式数组

exclude_matches

匹配模式数组

include_globs

glob数组

exclude_globs

glob数组

要匹配这些属性之一,URL 必须至少匹配其数组中的一个项目。例如,给定一个类似于以下内容的属性

json
"matches": ["*://*.example.org/*", "*://*.example.com/*"]

http://example.org/http://example.com/都将匹配。

由于matches是唯一必填键,因此其他三个键用于进一步限制匹配的 URL。要匹配整个键,URL 必须

  • 匹配matches属性
  • 并且匹配include_globs属性(如果存在)
  • 并且不匹配exclude_matches属性(如果存在)
  • 并且不匹配(如果存在)exclude_globs 属性。

通配符

通配符只是一个可能包含通配符的字符串。

有两种类型的通配符,你可以在同一个通配符中组合它们。

  1. * 匹配零个或多个字符。
  2. ? 匹配正好一个字符。

例如:"*na?i" 将匹配 "illuminati""annunaki",但不匹配 "sagnarelli"

示例

json
"content_scripts": [
  {
    "matches": ["*://*.mozilla.org/*"],
    "js": ["borderify.js"]
  }
]

这会将单个内容脚本 borderify.js 注入到 mozilla.org 或其任何子域下的所有页面中,无论是在 HTTP 还是 HTTPS 上提供服务。

json
  "content_scripts": [
    {
      "exclude_matches": ["*://mdn.org.cn/*"],
      "matches": ["*://*.mozilla.org/*"],
      "js": ["jquery.js", "borderify.js"]
    }
  ]

这会将两个内容脚本注入到 mozilla.org 或其任何子域下的所有页面中,除了 developer.mozilla.org,无论是在 HTTP 还是 HTTPS 上提供服务。

内容脚本看到 DOM 的相同视图,并且按照它们在数组中出现的顺序注入,因此 borderify.js 可以看到 jquery.js 添加的全局变量。

浏览器兼容性

BCD 表格仅在浏览器中加载