web_accessible_resources

类型 数组
强制
清单版本 2 或更高
示例
json
"web_accessible_resources": [
  "images/my-image.png"
]

描述

有时您希望将资源(例如图像、HTML、CSS 或 JavaScript)与您的扩展包捆绑在一起,并使它们可供网页和其他扩展使用。

注意:在 Firefox 105 之前,扩展默认情况下可以访问其他扩展中捆绑的资源。从 Firefox 105 开始,要使其他扩展能够访问扩展的资源,这些资源必须包含在此键中。

例如,Beastify 示例扩展 将网页替换为用户选择的动物图像。动物图像与扩展捆绑在一起。为了使选定的图像可见,扩展会添加<img> 元素,其 src 属性指向动物的图像。为了使网页能够加载图像,必须使它们可供 Web 访问。

使用 web_accessible_resources 键,您可以列出要使网页可用的所有捆绑资源。您可以将它们指定为相对于 manifest.json 文件的路径。

请注意,内容脚本不需要被列为可供 Web 访问的资源。

如果扩展想要使用 webRequestdeclarativeNetRequest 将公共 URL(例如 HTTPS)重定向到扩展中捆绑的页面,则扩展必须将该页面列在 web_accessible_resources 键中。

清单 V2 语法

在清单 V2 中,可供 Web 访问的资源作为键下的数组添加,如下所示

json
"web_accessible_resources": [
  "images/my-image.png"
]

清单 V3 语法

在清单 V3 中,web_accessible_resources 键是一个对象数组,如下所示

json
{
  // …
  "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
    }
  ]
  // …
}

每个对象都必须包含一个 "resources" 属性,以及以下属性中的 "matches""extension_ids" 属性

名称 类型 描述
extension_ids StringArray 可选。默认为 [],这意味着其他扩展无法访问该资源。

指定可以访问资源的扩展 ID 列表。"*" 匹配所有扩展。

matches StringArray 可选。默认为 [],这意味着其他网站无法访问该资源。

指定可以访问资源的页面的 URL 匹配模式 列表。仅使用原点来匹配 URL。原点包括子域匹配。路径必须设置为 /*

resources StringArray 要公开的资源数组。资源被指定为字符串,可以包含 * 用于通配符匹配。例如,"/images/*" 递归地公开扩展 /images 目录中的所有内容,而 "*.png" 则公开所有 PNG 文件。
use_dynamic_url 布尔值 可选。默认为 false

资源是否可以通过动态 ID 访问。动态 ID 针对每个会话生成,并在浏览器重启或扩展重新加载时重新生成。

使用 web_accessible_resources

假设您的扩展在 images/my-image.png 处包含一个图像文件,如下所示

my-extension-files/
    manifest.json
    my-background-script.js
    images/
        my-image.png

要使网页能够使用 src 属性指向该图像的 <img> 元素,您需要像这样指定 web_accessible_resources

json
"web_accessible_resources": ["images/my-image.png"]

然后可以使用类似以下的 URL 访问该文件

moz-extension://<extension-UUID>/images/my-image.png"

<extension-UUID> 不是您的扩展 ID。此 ID 是针对每个浏览器实例随机生成的。这可以防止网站通过检查已安装的扩展来对浏览器进行指纹识别。

注意:在清单 V2 的 Chrome 中,扩展的 ID 是固定的。当资源列在 web_accessible_resources 中时,可以通过 chrome-extension://<your-extension-id>/<path/to/resource> 访问它。在清单 V3 中,Chrome 可以通过将 use_dynamic_url 设置为 true 来使用动态 URL。

获取资源 URL 的推荐方法是使用 runtime.getURL,传递相对于 manifest.json 的路径,例如

js
browser.runtime.getURL("images/my-image.png");
// something like:
// moz-extension://944cfddf-7a95-3c47-bd9a-663b3ce8d699/images/my-image.png

这种方法无论您的扩展在哪个浏览器上运行都能提供正确的 URL。

通配符

web_accessible_resources 条目可以包含通配符。例如,以下条目也可以用于包含 "images/my-image.png" 处的资源

json
  "web_accessible_resources": ["images/*.png"]

安全

如果使页面可供 Web 访问,任何网站都可以链接或重定向到该页面。然后,页面应将任何输入(例如 POST 数据)视为来自不可信来源,就像普通网页一样。

可供 Web 访问的扩展资源不受 CORSCSP 的阻止。由于这种绕过安全检查的能力,扩展应尽可能避免使用可供 Web 访问的脚本。可供 Web 访问的扩展脚本可能会被恶意网站意外滥用,从而削弱其他网站的安全。通过避免在网页中注入 moz-extension:-URLs 以及确保第三方库是最新的,请遵循安全最佳实践

示例

清单 V2 示例

json
"web_accessible_resources": ["images/my-image.png"]

使 "images/my-image.png" 处的文件可供任何网站和扩展访问 Web。

清单 V3 示例

json
"web_accessible_resources": [
  {
    "resources": [ "images/my-image.png" ],
    "extension_ids": ["*"],
    "matches": [ "*://*/*" ]
  }
]

使 "images/my-image.png" 处的文件可供任何网站和扩展访问 Web。

建议仅在需要时指定 extension_idsmatches。例如,如果资源只需要可供 example.com 的网页访问

json
"web_accessible_resources": [
  {
    "resources": [ "images/my-image.png" ],
    "matches": [ "https://example.com/*" ]
  }
]

示例扩展

浏览器兼容性

BCD 表格仅在浏览器中加载