可通过网络访问的资源是指扩展程序内可供网页或其他扩展程序访问的文件。扩展程序通常会使用此功能来显示需要在网页中加载的图片或其他资源,但扩展程序软件包中包含的任何资源均可通过网络访问。
默认情况下,没有可通过 Web 访问的资源,因为恶意网站可以用“指纹”收集用户已安装的扩展程序,或利用已安装的扩展程序中的漏洞(例如 XSS bug)。只有从扩展程序的来源加载的网页或脚本才能访问该扩展程序的资源。
清单声明
使用 web_accessible_resources
清单属性声明向哪些来源公开哪些资源。此属性是声明资源访问规则的对象数组。每个对象都会列出一些扩展程序资源,并且必须为至少一个 matches
或 extension_ids
键提供一个值,以指明可以访问这些资源的来源。
{
...
"web_accessible_resources": [
{
"resources": [ "test1.png", "test2.png" ],
"matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
}, {
"resources": [ "test3.png", "test4.png" ],
"matches": [ "https://web-accessible-resources-2.glitch.me/*" ]
}
],
...
}
数组中的每个对象都包含以下元素:
"resources"
- 一个字符串数组,每个字符串都包含从扩展程序根目录到给定资源的相对路径。资源中可能会使用星号 (
*
) 表示通配符匹配。例如,"/images/*"
会递归公开扩展程序的images/
目录中的所有内容,而"*.png"
会公开所有 PNG 文件。 "matches"
- 一个字符串数组,每个字符串都包含一个匹配模式,用于指定哪些网站可以访问这组资源。只有来源用于匹配网址。来源包括子网域匹配。如果格式中的路径不是“/*”,Google Chrome 就会发出“匹配模式无效”错误。
"extension_ids"
- 一个字符串数组,每个字符串都包含可以访问资源的扩展程序的 ID。
每个元素都必须包含一个 "resources"
元素以及一个 "matches"
或 "extension_ids"
元素。此操作会建立一个映射,用于将指定资源公开到与该格式匹配的网页或具有匹配 ID 的扩展程序。
资源的可导航性
资源可通过网址 chrome-extension://[PACKAGE ID]/[PATH]
获取,该网址可通过 runtime.getURL()
方法生成。资源是使用适当的 CORS 标头提供的,因此可通过 fetch()
获取。
从 Web 来源到扩展程序资源的导航将被阻止,除非该资源被列为 Web 可访问。请注意以下极端情况:
- 当扩展程序使用 webRequest API 将公共资源请求重定向到无法通过 Web 访问的资源时,此类请求也会被屏蔽。
- 来自公共资源的重定向会被阻止,即使无法访问的 Web 资源归重定向扩展程序所有。
- 除非将
"incognito"
字段的值设为"split"
,否则在无痕模式下,系统会禁止导航。
不需要允许使用内容脚本本身。
示例
网络可访问的资源示例演示了如何在有效的扩展程序中使用此元素。