匹配模式

匹配模式是一種指定 URL 組的方法:匹配模式可以匹配一組特定的 URL。它們在 WebExtensions API 的幾個地方使用,最值得注意的是指定要將內容指令碼載入到哪些文件中,以及指定要新增webRequest 監聽器的哪些 URL。

使用匹配模式的 API 通常接受一個匹配模式列表,如果 URL 匹配任何模式,它們將執行相應的操作。例如,請參閱 manifest.json 中的content_scripts 鍵。

匹配模式結構

注意:某些瀏覽器不支援某些方案。請檢視瀏覽器相容性表格瞭解詳情。

所有匹配模式都指定為字串。除了特殊的<all_urls> 模式外,匹配模式由三個部分組成:方案主機路徑。方案和主機之間用 :// 分隔。

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

scheme

方案元件可以採取以下兩種形式之一

表單 匹配
* 僅支援 "http" 和 "https",在某些瀏覽器中還支援"ws" 和 "wss"
httphttpswswssftpdatafile(chrome-)extension 中的一個。 僅匹配給定的方案。

主機

主機元件可以採取以下三種形式之一

表單 匹配
* 任何主機。
*. 後面跟著主機名的一部分。 給定的主機及其任何子域。
一個完整的主機名,沒有萬用字元。 僅匹配給定的主機。

主機不得包含埠號。

僅當方案為 "file" 時,主機才是可選的。

請注意,萬用字元只能出現在開頭。

路徑

路徑元件必須以 / 開頭。

在此之後,它可以包含任意組合的 * 萬用字元以及 URL 路徑或查詢字串中允許的任何字元。與主機不同,路徑元件可以在中間或末尾包含 * 萬用字元,並且 * 萬用字元可以出現多次。

路徑的值將與 URL 路徑加上URL 查詢字串的字串進行匹配。如果 URL 中存在查詢字串,這將包括兩者之間的 ?。例如,如果您想匹配任何域上 URL 路徑以 foo.bar 結尾的 URL,則需要使用匹配模式陣列,例如 ["*://*/*foo.bar", "*://*/*foo.bar?*"]。這裡需要 ?* 而不是僅 bar*,是為了將結尾的 * 錨定到 URL 查詢字串,而不是 URL 路徑的某一部分。

Neither the URL fragment identifier, nor the # which precedes it, are considered as part of the path

注意:路徑模式字串不應包含埠號。新增埠,例如:https://:1234/* 會導致匹配模式被忽略。但是,https://:1234 會與 https:///* 匹配。

<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/

匹配 exactly "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:///*

瀏覽器相容性