匹配表达式

主机权限内容脚本的匹配基于匹配表达式定义的一组 URL。匹配表达式本质上就是以允许的协议(httphttpsfileftp)开头,并且可以包含星号(“*”)的 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>

星号(“*”)的意义取决于它在协议主机还是路径中。如果协议*,则可以匹配 httphttps,但不包括 fileftp。如果主机*,则匹配任何主机。如果主机*.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://* 无效的协议

某些协议不一定在所有上下文中都支持。