匹配模式
匹配模式是指定 URL 组的一种方式:匹配模式匹配特定的一组 URL。它们在 WebExtensions API 中的几个地方使用,最显著的是指定将加载哪些文档 内容脚本,以及指定将添加哪些 URL webRequest
监听器。
使用匹配模式的 API 通常接受匹配模式列表,如果 URL 与任何模式匹配,则将执行相应的操作。例如,请参见 manifest.json 中的 content_scripts
密钥。
匹配模式结构
注意: 一些浏览器不支持某些方案。有关详细信息,请查看 浏览器兼容性表。
所有匹配模式都指定为字符串。除了特殊的 <all_urls>
模式之外,匹配模式由三个部分组成:方案、主机和路径。方案和主机由 ://
分隔。
<scheme>://<host><path>
方案
方案 组件可以采用两种形式之一
形式 | 匹配 |
---|---|
* |
仅“http”和“https”,在某些浏览器中还包括 "ws" 和 "wss"。 |
http 、https 、ws 、wss 、ftp 、data 、file 或 (chrome-)extension 之一。 |
仅指定方案。 |
主机
主机 组件可以采用三种形式之一
形式 | 匹配 |
---|---|
* |
任何主机。 |
*. 后跟主机名的部分。 |
给定主机及其所有子域。 |
完整的主机名,不包含通配符。 | 仅指定主机。 |
主机 必须不包含端口号。
如果方案 为“file”,则主机 是可选的。
请注意,通配符只能出现在开头。
路径
路径 组件必须以 /
开头。
之后,它可以包含 *
通配符与 URL 路径或查询字符串中允许的任何字符的任何组合。与主机 不同,路径 组件可以在中间或末尾包含 *
通配符,并且 *
通配符可以出现多次。
路径 的值与 URL 路径加上 URL 查询字符串 的字符串进行匹配。这包括 ?
,如果 URL 中存在查询字符串,则在两者之间。例如,如果您想匹配任何域上的 URL,其中 URL 路径以 foo.bar
结尾,那么您需要使用类似 ["*://*/*foo.bar", "*://*/*foo.bar?*"]
的匹配模式数组。需要 ?*
,而不是 bar*
,以便将结尾的 *
锚定为应用于 URL 查询字符串,而不是 URL 路径的某一部分。
无论是 URL 片段标识符,还是它之前的 #
,都不被视为路径 的一部分。
注意: 路径模式字符串不应包含端口号。添加端口(如:https://127.0.0.1:1234/*
)会导致匹配模式被忽略。但是,https://127.0.0.1:1234
将与 https://127.0.0.1/*
匹配。
<all_urls>
特殊值 <all_urls>
匹配所有支持方案下的所有 URL:即“http”、“https”、“ws”、“wss”、“ftp”、“data”和“file”。
示例
模式 | 示例匹配 | 示例不匹配 |
---|---|---|
匹配所有 URL。 |
|
|
匹配所有 HTTP、HTTPS 和 WebSocket URL。 |
|
|
匹配在“mozilla.org”或其子域上托管的所有 HTTP、HTTPS 和 WebSocket URL。 |
|
|
匹配在“mozilla.org/”上托管的 所有 HTTP、HTTPS 和 WebSocket URL。 |
|
|
仅匹配“ftp://mozilla.org/”。 |
ftp://mozilla.org |
|
匹配任何主机上的 HTTPS URL,其路径为“path”。 |
|
|
匹配任何主机上的 HTTPS URL,其路径为“path/”,并且没有 URL 查询字符串。 |
|
|
仅匹配“mozilla.org”上的 HTTPS URL,带任何 URL 路径和 URL 查询字符串。 |
|
|
仅匹配此 URL,或带有任何 URL 片段的此 URL。 |
|
任何其他内容。 |
匹配在“mozilla.org”上托管的 HTTPS URL,其路径在中间包含“b”组件。如果字符串以 |
|
|
匹配任何路径以“blah”开头的 FILE URL。 |
|
file:///bleh/ (不匹配路径) |
无效匹配模式
无效模式 | 原因 |
---|---|
resource://path/ |
不支持的方案。 |
https://mozilla.org |
没有路径。 |
https://mozilla.*.org/ |
主机中的“*”必须位于开头。 |
https://*zilla.org/ |
主机中的“*”必须是唯一的字符,或者后面紧跟“.”。 |
http*://mozilla.org/ |
方案中的“*”必须是唯一的字符。 |
https://mozilla.org:80/ |
主机名不能包含端口号。 |
*://* |
空路径:应该为 "*://*/* "。 |
file://* |
空路径:应该为 "file:///* "。 |
浏览器兼容性
BCD 表格仅在浏览器中加载