匹配模式

匹配模式是指定 URL 组的一种方式:匹配模式匹配特定的一组 URL。它们在 WebExtensions API 中的几个地方使用,最显著的是指定将加载哪些文档 内容脚本,以及指定将添加哪些 URL webRequest 监听器。

使用匹配模式的 API 通常接受匹配模式列表,如果 URL 与任何模式匹配,则将执行相应的操作。例如,请参见 manifest.json 中的 content_scripts 密钥。

匹配模式结构

注意: 一些浏览器不支持某些方案。有关详细信息,请查看 浏览器兼容性表

所有匹配模式都指定为字符串。除了特殊的 <all_urls> 模式之外,匹配模式由三个部分组成:方案主机路径。方案和主机由 :// 分隔。

<scheme>://<host><path>

方案

方案 组件可以采用两种形式之一

形式 匹配
* 仅“http”和“https”,在某些浏览器中还包括 "ws" 和 "wss"
httphttpswswssftpdatafile(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”。

示例

模式 示例匹配 示例不匹配

<all_urls>

匹配所有 URL。

http://example.org/

https://a.org/some/path/

ws://sockets.somewhere.org/

wss://ws.example.com/stuff/

ftp://files.somewhere.org/

resource://a/b/c/
(不支持的方案)

ftps://files.somewhere.org/
(不支持的方案)

*://*/*

匹配所有 HTTP、HTTPS 和 WebSocket URL。

http://example.org/

https://a.org/some/path/

ws://sockets.somewhere.org/

wss://ws.example.com/stuff/

ftp://ftp.example.org/
(不匹配方案)

file:///a/
(不匹配方案)

*://*.mozilla.org/*

匹配在“mozilla.org”或其子域上托管的所有 HTTP、HTTPS 和 WebSocket URL。

http://mozilla.org/

https://mozilla.org/

http://a.mozilla.org/

http://a.b.mozilla.org/

https://b.mozilla.org/path/

ws://ws.mozilla.org/

wss://secure.mozilla.org/something

ftp://mozilla.org/
(不匹配方案)

http://mozilla.com/
(不匹配主机)

http://firefox.org/
(不匹配主机)

*://mozilla.org/

匹配在“mozilla.org/”上托管的 所有 HTTP、HTTPS 和 WebSocket URL。

http://mozilla.org/

https://mozilla.org/

ws://mozilla.org/

wss://mozilla.org/

ftp://mozilla.org/
(不匹配方案)

http://a.mozilla.org/
(不匹配主机)

http://mozilla.org/a
(不匹配路径)

ftp://mozilla.org/

仅匹配“ftp://mozilla.org/”。

ftp://mozilla.org

http://mozilla.org/
(不匹配方案)

ftp://sub.mozilla.org/
(不匹配主机)

ftp://mozilla.org/path
(不匹配路径)

https://*/path

匹配任何主机上的 HTTPS URL,其路径为“path”。

https://mozilla.org/path

https://a.mozilla.org/path

https://something.com/path

http://mozilla.org/path
(不匹配方案)

https://mozilla.org/path/
(不匹配路径)

https://mozilla.org/a
(不匹配路径)

https://mozilla.org/
(不匹配路径)

https://mozilla.org/path?foo=1
(由于 URL 查询字符串,路径不匹配)

https://*/path/

匹配任何主机上的 HTTPS URL,其路径为“path/”,并且没有 URL 查询字符串。

https://mozilla.org/path/

https://a.mozilla.org/path/

https://something.com/path/

http://mozilla.org/path/
(不匹配方案)

https://mozilla.org/path
(不匹配路径)

https://mozilla.org/a
(不匹配路径)

https://mozilla.org/
(不匹配路径)

https://mozilla.org/path/?foo=1
(由于 URL 查询字符串,路径不匹配)

https://mozilla.org/*

仅匹配“mozilla.org”上的 HTTPS URL,带任何 URL 路径和 URL 查询字符串。

https://mozilla.org/

https://mozilla.org/path

https://mozilla.org/another

https://mozilla.org/path/to/doc

https://mozilla.org/path/to/doc?foo=1

http://mozilla.org/path
(不匹配方案)

https://mozilla.com/path
(不匹配主机)

https://mozilla.org/a/b/c/

仅匹配此 URL,或带有任何 URL 片段的此 URL。

https://mozilla.org/a/b/c/

https://mozilla.org/a/b/c/#section1

任何其他内容。

https://mozilla.org/*/b/*/

匹配在“mozilla.org”上托管的 HTTPS URL,其路径在中间包含“b”组件。如果字符串以 / 结尾,则将匹配带有查询字符串的 URL。

https://mozilla.org/a/b/c/

https://mozilla.org/d/b/f/

https://mozilla.org/a/b/c/d/

https://mozilla.org/a/b/c/d/#section1

https://mozilla.org/a/b/c/d/?foo=/

https://mozilla.org/a?foo=21314&bar=/b/&extra=c/

https://mozilla.org/b/*/
(不匹配路径)

https://mozilla.org/a/b/
(不匹配路径)

https://mozilla.org/a/b/c/d/?foo=bar
(由于 URL 查询字符串,路径不匹配)

file:///blah/*

匹配任何路径以“blah”开头的 FILE URL。

file:///blah/

file:///blah/bleh

file:///bleh/
(不匹配路径)

无效匹配模式

无效模式 原因
resource://path/ 不支持的方案。
https://mozilla.org 没有路径。
https://mozilla.*.org/ 主机中的“*”必须位于开头。
https://*zilla.org/ 主机中的“*”必须是唯一的字符,或者后面紧跟“.”。
http*://mozilla.org/ 方案中的“*”必须是唯一的字符。
https://mozilla.org:80/ 主机名不能包含端口号。
*://* 空路径:应该为 "*://*/*"。
file://* 空路径:应该为 "file:///*"。

浏览器兼容性

BCD 表格仅在浏览器中加载