permissions
| 类型 | Array |
|---|---|
| 必填 | 否 |
| Manifest 版本 | 2 或更高 |
| 示例 |
json |
使用 permissions 键来请求扩展的特殊权限。此键是一个字符串数组,每个字符串都表示一个权限请求。
如果您使用此键请求权限,则浏览器可能会在安装时告知用户扩展正在请求某些特权,并要求用户确认他们是否愿意授予这些特权。浏览器还可能允许用户在安装后检查扩展的特权。由于授予特权的请求可能会影响用户安装扩展的意愿,因此请求特权值得仔细考虑。例如,您应该避免请求不必要的权限,并在扩展商店描述中提供有关请求权限原因的信息。有关应考虑的问题的更多信息,请参阅文章 请求正确的权限。
有关如何测试和预览权限请求的信息,请参阅扩展工作坊网站上的 测试权限请求。
此键可包含三种权限
- 主机权限(仅限 Manifest V2;在 Manifest V3 或更高版本中,主机权限在
host_permissionsmanifest 键中指定。) - API 权限
activeTab权限
主机权限
注意:如何请求主机权限取决于您是在安装时还是在运行时需要它们,以及您的扩展使用的是哪个 manifest 版本。
- Manifest V2
- 安装时使用此 (
permissions) manifest 键请求。 - 运行时使用
optional_permissionsmanifest 键请求。
- 安装时使用此 (
- Manifest V3 或更高版本
- 安装时使用
host_permissionsmanifest 键请求。 - 运行时使用
optional_host_permissionsmanifest 键请求。
- 安装时使用
主机权限指定为 匹配模式,每个模式标识一组 URL,扩展程序正在为这些 URL 请求额外的特权。例如,一个主机权限可以是 "*://mdn.org.cn/*"。
额外特权包括
- XMLHttpRequest 和 fetch 访问这些源,无跨域限制(即使是从内容脚本发出的请求)
- 在不需要
"tabs"权限的情况下,读取标签页特定元数据的能力,例如tabs.Tab对象的url、title和favIconUrl属性 - 以编程方式将内容脚本和样式注入由这些源提供的页面中的能力(请参阅 加载内容脚本)。
- 接收这些主机
webRequestAPI 事件的能力 - 使用
cookiesAPI 访问该主机的 cookie 的能力,前提是同时包含"cookies"API 权限。 - 绕过扩展页面上的跟踪保护,其中主机被指定为完整域名或通配符。但是,内容脚本只能绕过指定为完整域名的主机的跟踪保护。
在 Firefox 56 及更高版本中,扩展程序会自动获得其自身 origin 的主机权限,形式为
moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/
其中 60a20a9b-1ad4-af49-9b6c-c64c98c37920 是扩展的内部 ID。扩展程序可以通过调用 extension.getURL() 以编程方式获取此 URL
browser.extension.getURL("");
// moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/
API 权限
API 权限指定为关键字,每个关键字都命名了扩展程序希望使用的 WebExtension API。
这些权限在 Manifest V2 及更高版本中可用,除非另有说明
activeTabalarmsbackgroundbookmarksbrowserSettingsbrowsingDatacaptivePortalclipboardReadclipboardWritecontentSettingscontextMenuscontextualIdentitiescookiesdebuggerdeclarativeNetRequestdeclarativeNetRequestFeedbackdeclarativeNetRequestWithHostAccessdevtools(当devtools_pagemanifest 键存在时,此权限会自动授予。)dnsdownloadsdownloads.openfindgeolocationhistoryidentityidlemanagementmenusmenus.overrideContextnativeMessagingnotificationspageCapturepkcs11privacyproxyscriptingsearchsessionsstoragetabGroupstabHidetabsthemetopSitesunlimitedStorage- 'userScripts'(请参阅 userScripts 权限)
webNavigationwebRequestwebRequestAuthProvider(Manifest V3 及更高版本)webRequestBlockingwebRequestFilterResponsewebRequestFilterResponse.serviceWorkerScript
在大多数情况下,权限仅授予对 API 的访问权,但有以下例外
-
tabs权限允许您访问tabsAPI 的特权部分,而无需主机权限:Tab.url、Tab.title和Tab.faviconUrl。- 在 Firefox 85 及更早版本中,如果您想在
tabs.query()的queryInfo参数中包含url,也需要tabs权限。其余的tabsAPI 可以在不请求任何权限的情况下使用。 - 从 Firefox 86 和 Chrome 50 开始,匹配的主机权限也可以代替 "tabs" 权限使用。
- 在 Firefox 85 及更早版本中,如果您想在
-
webRequestBlocking权限使您能够使用"blocking"参数,从而可以修改和取消请求。 -
downloads.open权限允许您使用downloads.open()API。 -
tabHide权限允许您使用tabs.hide()API。
activeTab 权限
如果扩展程序拥有 "activeTab" 权限,当用户与扩展程序进行交互时,该扩展程序将仅为活动标签页授予额外的特权。
这些交互被称为用户操作,包括用户
- 点击扩展程序的工具栏按钮或页面操作。
- 选择扩展程序的上下文菜单项。
- 激活扩展程序定义的键盘快捷键(从 Firefox 63 开始)。
- 点击随扩展程序捆绑的页面上的按钮。
- 点击地址栏(omnibox)中的扩展程序建议(从 Firefox 142 开始)。
额外特权包括
- 以编程方式将 JavaScript 或 CSS 注入标签页的能力(请参阅 加载内容脚本)。
- 访问当前标签页的特权标签页 API 部分:
Tab.url、Tab.title和Tab.faviconUrl。
此权限的目的是使扩展程序能够满足常见的用例,而无需授予非常强大的权限。许多扩展程序希望在用户请求时“对当前页面执行某些操作”。
例如,考虑一个扩展程序,它希望在用户单击浏览器操作时在当前页面上运行脚本。如果 activeTab 权限不存在,该扩展程序将需要请求主机权限 <all_urls>。但这赋予了扩展程序比它需要的更多的权力:它现在可以随时随地在任何标签页中执行脚本,而不是仅限于活动标签页,并且仅响应用户操作。
注意:您只能访问用户交互发生时(例如,单击)的标签页/数据。当活动标签页导航离开时(例如,由于加载完成或其他事件),权限将不再授予您访问该标签页的权限。
activeTab 权限允许对顶层标签页的页面和同源框架进行脚本访问。在 跨域框架内运行脚本或修改样式可能需要额外的主机权限。当然,与特定网站和 URI 方案相关的限制和约束也适用。
通常,授予 activeTab 权限的标签页是活动标签页,但有一个例外。扩展程序可以使用 menus API 创建一个菜单项,当用户右键单击标签页时显示。也就是说,在标签页切换器上的元素上显示一个菜单,使用户能够从一个标签页切换到另一个标签页。如果用户单击此菜单,则授予用户单击的标签页的 activeTab 权限,即使它不是活动标签页(从 Firefox 63 开始,Firefox bug 1446956)。
剪贴板访问
有两个权限使扩展程序能够与剪贴板进行交互
clipboardWrite-
使用
Clipboard.write()、Clipboard.writeText()、document.execCommand("copy")或document.execCommand("cut")写入剪贴板 clipboardRead-
使用
Clipboard.read()、Clipboard.readText()或document.execCommand("paste")从剪贴板读取
有关更多详细信息,请参阅 与剪贴板交互。
无限制存储
unlimitedStorage 权限
- 允许扩展程序超出
storage.localAPI 施加的任何配额 - 在 Firefox 中,允许扩展程序创建“持久性”IndexedDB 数据库,而无需浏览器在创建数据库时提示用户。
示例
"permissions": ["*://mdn.org.cn/*"]
仅限 Manifest V2,请求访问 developer.mozilla.org 下的特权页面。
"permissions": ["tabs"]
请求访问 tabs API 的特权部分。
"permissions": ["*://mdn.org.cn/*", "tabs"]
仅限 Manifest V2,同时请求以上两个权限。
浏览器兼容性
加载中…