host_permissions

类型 Array
必填
Manifest 版本 3 或更高版本
示例
json
"host_permissions": [
  "*://mdn.org.cn/*",
  "*://*.example.org/*"
]

使用 host_permissions 键来请求访问扩展中读取或修改主机数据的 API,例如 cookieswebRequesttabs。此键是一个字符串数组,每个字符串都是一个权限请求。

请求的权限和用户提示

用户可以 临时授予或撤销主机权限。因此,大多数浏览器将 host_permissions 视为可选权限。

安装时,当您使用此键请求权限时

  • 在 Firefox 126 之前,Manifest V3 扩展请求的主机权限不会显示在安装提示中。从 Firefox 127 开始,host_permissionscontent_scripts 中列出的主机权限将显示在安装提示中。但是,如果扩展更新请求新的主机权限,这些权限不会显示给用户。请参阅(Firefox bug 1893232)。
  • Chrome 会在安装提示中显示权限。
  • Safari 不会在安装提示中显示请求的主机权限。

您的扩展可以在安装后立即使用 permissions.contains 检查它是否拥有所有必需的权限。如果它没有必要的权限,它可以使用 permissions.request 请求它们。提供一个入门步骤来解释为什么某些权限是必需的,然后再请求它们可能也有帮助。

由于授予主机权限的请求可能会影响用户安装您扩展的意愿,因此请求主机权限需要仔细考虑。例如,您希望避免请求不必要的主机权限,并且可能希望在扩展的商店描述中提供有关您为何请求主机权限的信息。文章 Request the right permissions 提供了更多关于您应该考虑的问题的信息。

有关如何测试和预览权限请求的信息,请参阅 Extension Workshop 网站上的 Test permission requests

格式

主机权限指定为 匹配模式,每个模式标识扩展请求额外特权的一组 URL。例如,主机权限可以是 "*://mdn.org.cn/*"

额外特权包括

  • XMLHttpRequestfetch 对这些来源的访问,没有跨域限制(尽管不适用于来自内容脚本的请求,这与 Manifest V2 中的情况相同)。
  • 在没有 "tabs" 权限的情况下读取标签特定元数据的能力,例如 tabs.Tab 对象的 urltitlefavIconUrl 属性。
  • 使用 tabs.executeScript() 以编程方式将脚本注入来自这些来源的页面。
  • 接收来自这些主机 webRequest API 的事件的能力。
  • 使用 cookies API 访问该主机 cookie 的能力,只要也包含 "cookies" API 权限。
  • 绕过扩展页面中将主机指定为完整域或通配符的跟踪保护。

在 Firefox 中,扩展会获得其来源的主机权限,其形式为

url
moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/

其中 60a20a9b-1ad4-af49-9b6c-c64c98c37920 是扩展的内部 ID。扩展可以通过调用 extension.getURL() 以编程方式获取此 URL。

js
browser.extension.getURL("");
// moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/

示例

json
 "host_permissions": ["*://mdn.org.cn/*"]

请求对 developer.mozilla.org 下页面的特权访问。

扩展程序示例

浏览器兼容性