匹配表达式
主机权限和内容脚本的匹配基于匹配表达式定义的一组 URL。匹配表达式本质上就是以允许的协议(http
、https
、file
或
ftp
)开头,并且可以包含星号(“*
”)的
URL。特殊的表达式 <all_urls>
匹配以允许的协议开头的任何
URL。每一个匹配表达式包含三部分:
- 协议 —
例如,
http
或file
or*
注意:对
file
URL 的访问不是自动的,用户必须进入扩展程序管理页面,允许需要的扩展程序访问file
协议。 - 主机 —
例如,
www.google.com
或*.google.com
或*
。如果协议为file
,则没有主机部分 - 路径 —
例如,
/*
、/foo*
或/foo/bar
。主机权限中必须包含路径,但是始终视为/*
。
如下是基本语法:
<url-pattern> := <scheme>://<host><path> <scheme> := '*' | 'http' | 'https' | 'file' | 'ftp' <host> := '*' | '*.' <any char except '/' and '*'>+ <path> := '/' <any chars>
星号(“*
”)的意义取决于它在协议、主机还是路径中。如果协议为
*
,则可以匹配 http
或
https
,但不包括
file
或 ftp
。如果主机为
*
,则匹配任何主机。如果主机为
*.hostname
,则匹配指定主机或者任何子域名。在路径部分,每一个 “*
” 匹配 0
个或多个字符。下表展示了一些有效的表达式。
表达式 | 含义 | 匹配 URL 的例子 |
---|---|---|
http://*/*
|
匹配使用 http 协议的任意 URL |
http://www.google.com/ http://example.org/foo/bar.html |
http://*/foo*
|
匹配使用 http 协议、任意主机、路径以 /foo
开头的任意 URL。
|
http://example.com/foo/bar.html http://www.google.com/foo |
https://*.google.com/foo*bar
|
匹配使用 https 协议、在
google.com 主机上(例如
www.google.com、docs.google.com
或 google.com)、并且路径以 /foo
开头、以 bar
结尾的任意 URL。
|
http://www.google.com/foo/baz/bar http://docs.google.com/foobar |
http://example.org/foo/bar.html
|
匹配指定 URL。 | http://example.org/foo/bar.html |
file:///foo*
|
匹配路径以 /foo
开头的所有本地文件。
|
file:///foo/bar.html file:///foo |
http://127.0.0.1/*
|
匹配使用 http
协议、主机为 127.0.0.1 的任意 URL。
|
http://127.0.0.1/ http://127.0.0.1/foo/bar.html |
*://mail.google.com/*
|
匹配以
http://mail.google.com 或
https://mail.google.com
开头的任意 URL。
|
http://mail.google.com/foo/baz/bar https://mail.google.com/foobar |
<all_urls>
|
匹配使用允许协议的任何 URL(有关允许的协议列表,请参见这一部分的开头)。 |
http://example.org/foo/bar.html file:///bar/baz.html |
如下是一些无效的匹配表达式的例子:
无效的表达式 | 原因 |
---|---|
http://www.google.com |
没有路径 |
http://*foo/bar |
主机部分的“*”必须在“.”或“/”前面 |
http://foo.*.bar/baz |
如果“*”在主机中,它必须是第一个字符 |
http:/bar |
缺少协议分隔符(“/”应该为“//”) |
foo://* |
无效的协议 |
某些协议不一定在所有上下文中都支持。