权限

类型 数组
强制
清单版本 2 或更高
示例
json
"permissions": [
  "webRequest"
]

使用 permissions 键为您的扩展请求特殊权限。此键是一个字符串数组,每个字符串都是对权限的请求。

如果您使用此键请求权限,那么浏览器可能会在安装时告知用户扩展正在请求某些权限,并要求他们确认他们是否愿意授予这些权限。浏览器还可能允许用户在安装后检查扩展的权限。由于授予权限的请求可能会影响用户安装您的扩展的意愿,因此请求权限需要仔细考虑。例如,您要避免请求不必要的权限,并可能希望在扩展的商店描述中提供有关为何请求权限的信息。本文档中提供了有关您应考虑的问题的更多信息。 请求正确的权限.

有关如何测试和预览权限请求的信息,请参阅 测试权限请求 在扩展工作坊网站上。

该键可以包含三种类型的权限

  • 主机权限(仅限清单 V2,主机权限在 host_permissions 清单 V3 或更高版本的清单键中指定。)
  • API 权限
  • activeTab 权限

主机权限

注意: 如何请求主机权限取决于您是在安装时还是运行时需要它们,以及您的扩展使用的是哪个清单版本。

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

额外权限包括

  • XMLHttpRequestfetch 访问这些来源,无需跨域限制(即使对于从内容脚本发出的请求)
  • 在没有“tabs”权限的情况下读取特定于标签的元数据的能力,例如 tabs.Tab 对象的 urltitlefavIconUrl 属性
  • 能够 以编程方式注入内容脚本 和样式到从这些来源提供的页面中。
  • 能够从 webRequest API 接收来自这些主机的事件
  • 能够使用 cookies API 访问该主机的 cookie,只要还包括 "cookies" API 权限。
  • 绕过跟踪保护,用于扩展页面,其中主机被指定为完整域或带有通配符。但是,内容脚本只能绕过对使用完整域指定的主机的跟踪保护。

在 Firefox 中,从 56 版开始,扩展会自动获得其自身来源的主机权限,该来源的格式为

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/

API 权限

API 权限被指定为关键字,每个关键字都命名扩展想要使用的 WebExtension API

这些权限在清单 V2 及更高版本中可用,除非另有说明

  • activeTab
  • alarms
  • background
  • bookmarks
  • browserSettings
  • browsingData
  • captivePortal
  • clipboardRead
  • clipboardWrite
  • contentSettings
  • contextMenus
  • contextualIdentities
  • cookies
  • debugger
  • declarativeNetRequest
  • declarativeNetRequestFeedback
  • declarativeNetRequestWithHostAccess
  • devtools(当 devtools_page 清单键存在时,此权限会隐式授予。)
  • dns
  • downloads
  • downloads.open
  • find
  • geolocation
  • history
  • identity
  • idle
  • management
  • menus
  • menus.overrideContext
  • nativeMessaging
  • notifications
  • pageCapture
  • pkcs11
  • privacy
  • proxy
  • scripting
  • search
  • sessions
  • storage
  • tabHide
  • tabs
  • theme
  • topSites
  • unlimitedStorage
  • webNavigation
  • webRequest
  • webRequestAuthProvider(清单 V3 及更高版本)
  • webRequestBlocking
  • webRequestFilterResponse
  • webRequestFilterResponse.serviceWorkerScript

在大多数情况下,权限只授予对 API 的访问权限,以下情况除外

  • tabs 使您可以访问 tabs API 的特权部分,无需 主机权限Tab.urlTab.titleTab.faviconUrl
    • 在 Firefox 85 及更早版本中,如果您想要在 queryInfo 参数中包含 url,您还需要 tabs,以便使用 tabs.query()。其他 tabs API 可以不请求任何权限即可使用。
    • 从 Firefox 86 和 Chrome 50 开始,也可以使用匹配的 主机权限 来代替“tabs”权限。
  • webRequestBlocking 使您能够使用 "blocking" 参数,因此您可以 修改和取消请求
  • downloads.open 使您能够使用 downloads.open() API。
  • tabHide 使您能够使用 tabs.hide() API。

activeTab 权限

此权限被指定为 "activeTab"。如果扩展具有 activeTab 权限,那么当用户与扩展交互时,扩展将仅对活动标签授予额外权限。

“用户交互”包括

  • 用户点击扩展的 浏览器操作页面操作
  • 用户选择其上下文菜单项
  • 用户激活扩展程序定义的键盘快捷键

额外权限包括:

  • 以编程方式将 JavaScript 或 CSS 注入选项卡(参见 加载内容脚本)。
  • 访问当前选项卡的选项卡 API 特权部分:Tab.urlTab.titleTab.faviconUrl

此权限的目的是使扩展程序能够满足常见用例,而不必赋予它们非常强大的权限。许多扩展程序希望在用户要求时“对当前页面执行某些操作”。

例如,考虑一个扩展程序,它希望在用户单击浏览器操作时在当前页面中运行脚本。如果不存在 activeTab 权限,则扩展程序将需要请求主机权限 <all_urls>。但这会赋予扩展程序比它需要的更多权限:它现在可以随时在任何选项卡中执行脚本,而不仅仅是活动选项卡,并且仅响应用户操作。

注意:你只能访问用户交互时存在的选项卡/数据(例如点击)。当活动选项卡导航离开(例如,由于加载完成或其他事件)时,该权限不再授予你访问该选项卡的权限。

activeTab 权限允许脚本访问顶级选项卡的页面和同源框架。在 跨域 框架内运行脚本或修改样式可能需要额外的 主机权限。当然,与特定站点和 URI 方案相关的 限制 也会应用。

通常,授予 activeTab 的选项卡只是当前活动选项卡,但有一种例外情况。 menus API 使扩展程序能够创建一个菜单项,如果用户右键单击选项卡(即选项卡栏中的元素,允许用户从一个选项卡切换到另一个选项卡),该菜单项就会显示。

如果用户单击了这样的项目,则会授予该选项卡 activeTab 权限,即使它不是当前活动选项卡(从 Firefox 63 开始,Firefox 错误 1446956)。

剪贴板访问

有两个权限允许扩展程序与剪贴板交互

clipboardWrite

使用 Clipboard.write()Clipboard.writeText()document.execCommand("copy")document.execCommand("cut") 将内容写入剪贴板

clipboardRead

使用 Clipboard.read()Clipboard.readText()document.execCommand("paste") 从剪贴板读取内容

有关更多详细信息,请参见 与剪贴板交互

无限存储

unlimitedStorage 权限

  • 使扩展程序能够超过 storage.local API 强制实施的任何配额
  • 在 Firefox 中,允许扩展程序创建 "持久" IndexedDB 数据库,而无需浏览器在创建数据库时提示用户请求权限。

示例

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

仅在 Manifest V2 中,请求对 developer.mozilla.org 下的页面特权访问。

json
  "permissions": ["tabs"]

请求访问 tabs API 的特权部分。

json
  "permissions": ["*://mdn.org.cn/*", "tabs"]

仅在 Manifest V2 中,请求上述两个权限。

浏览器兼容性

BCD 表格仅在浏览器中加载