清单 - Web 可访问资源
发表于 •更新日期
Web 可访问资源是扩展内的文件,可以通过网页或其他扩展访问。扩展通常使用此功能来公开需要在网页中加载的图像或其他资产,但扩展包中包含的任何资产都可以通过网络访问。
默认情况下,没有任何资源可通过 Web 访问;只有从扩展源加载的页面或脚本才能访问该扩展的资源。扩展作者可以使用web_accessible_resources
manifest 属性来声明哪些资源被公开以及哪些来源。
在 Manifest V2 之前,可以从 Web 上的任何页面访问扩展中的所有资源。这允许恶意网站识别用户已安装的扩展程序或利用已安装扩展程序中的漏洞(例如XSS 错误)。
从 Manifest V2 开始,对这些资源的访问受到限制以保护用户的隐私。Manifest V2 扩展仅公开那些明确指定为 Web 可访问的资源。
Manifest V3 提供了更细粒度的控制,让您可以将单个资源公开给指定的页面、域或扩展。
#清单声明
声明资源访问规则的对象数组。每个对象将扩展资源数组映射到可以访问这些资源的 URL 和/或扩展 ID 数组。
{
...
"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/*" ],
"use_dynamic_url": true
}
],
...
}
数组中的每个对象都包含以下属性:
-
要公开的资源数组。资源被指定为字符串,并且可能包含
*
通配符匹配。例如,在暴露所有 PNG 文件"/images/*"
的同时,递归地暴露扩展的 /images 目录中的所有内容。"*.png"
- 指定哪些页面可以访问资源的 URL 匹配模式列表。只有源用于匹配 URL。来源包括子域匹配。路径被忽略。
- 扩展 ID 列表,指定哪些扩展可以访问资源。
- 如果为 true,则只允许通过动态 ID 访问资源。每个会话都会生成动态 ID。它在浏览器重新启动或扩展重新加载时重新生成。
resources
matches
extension_ids
use_dynamic_url
每个元素必须包含一个"resources"
元素和一个"matches"
或"extension_ids"
元素。这会建立一个映射,将指定的资源公开给与该模式匹配的网页或指定的扩展。
#资源的可导航性
这些资源可通过 URL 在网页中使用chrome-extension://[PACKAGE ID]/[PATH]
,可以使用该runtime.getURL
方法生成。这些资源由适当的CORS标头提供,因此它们可以通过 XHR 等机制获得。
从 Web 源到扩展资源的导航将被阻止,除非该资源被列为 Web 可访问的。请注意这些极端情况:
- 当扩展使用webRequest或declarativeWebRequest API 将公共资源请求重定向到 Web 不可访问的资源时,此类请求也会被阻止。
- 即使无法通过 Web 访问的资源归重定向扩展所有,上述情况也适用。
不需要允许内容脚本本身。
#例子
Web Accessible Resources 示例演示了如何在工作扩展中使用此元素。
最近更新时间: 改进文章