权限
类型 | 数组 |
---|---|
强制 | 否 |
清单版本 | 2 或更高 |
示例 |
json
|
使用 permissions
键为您的扩展请求特殊权限。此键是一个字符串数组,每个字符串都是对权限的请求。
如果您使用此键请求权限,那么浏览器可能会在安装时告知用户扩展正在请求某些权限,并要求他们确认他们是否愿意授予这些权限。浏览器还可能允许用户在安装后检查扩展的权限。由于授予权限的请求可能会影响用户安装您的扩展的意愿,因此请求权限需要仔细考虑。例如,您要避免请求不必要的权限,并可能希望在扩展的商店描述中提供有关为何请求权限的信息。本文档中提供了有关您应考虑的问题的更多信息。 请求正确的权限.
有关如何测试和预览权限请求的信息,请参阅 测试权限请求 在扩展工作坊网站上。
该键可以包含三种类型的权限
- 主机权限(仅限清单 V2,主机权限在
host_permissions
清单 V3 或更高版本的清单键中指定。) - API 权限
activeTab
权限
主机权限
注意: 如何请求主机权限取决于您是在安装时还是运行时需要它们,以及您的扩展使用的是哪个清单版本。
- 清单 V2
- 使用此(
permissions
)清单键进行安装时请求。 - 使用
optional_permissions
清单键进行运行时请求。
- 使用此(
- 清单 V3 或更高
- 使用
host_permissions
清单键进行安装时请求。 - 使用
optional_host_permissions
清单键进行运行时请求。
- 使用
主机权限被指定为 匹配模式,每个模式标识扩展请求额外权限的一组 URL。例如,主机权限可以是 "*://mdn.org.cn/*"
。
额外权限包括
- XMLHttpRequest 和 fetch 访问这些来源,无需跨域限制(即使对于从内容脚本发出的请求)
- 在没有“tabs”权限的情况下读取特定于标签的元数据的能力,例如
tabs.Tab
对象的url
、title
和favIconUrl
属性 - 能够 以编程方式注入内容脚本 和样式到从这些来源提供的页面中。
- 能够从
webRequest
API 接收来自这些主机的事件 - 能够使用
cookies
API 访问该主机的 cookie,只要还包括"cookies"
API 权限。 - 绕过跟踪保护,用于扩展页面,其中主机被指定为完整域或带有通配符。但是,内容脚本只能绕过对使用完整域指定的主机的跟踪保护。
在 Firefox 中,从 56 版开始,扩展会自动获得其自身来源的主机权限,该来源的格式为
moz-extension:/
其中 60a20a9b-1ad4-af49-9b6c-c64c98c37920
是扩展的内部 ID。扩展可以通过调用 extension.getURL()
以编程方式获取此 URL
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.url
、Tab.title
和Tab.faviconUrl
。- 在 Firefox 85 及更早版本中,如果您想要在
queryInfo
参数中包含url
,您还需要tabs
,以便使用tabs.query()
。其他tabs
API 可以不请求任何权限即可使用。 - 从 Firefox 86 和 Chrome 50 开始,也可以使用匹配的 主机权限 来代替“tabs”权限。
- 在 Firefox 85 及更早版本中,如果您想要在
webRequestBlocking
使您能够使用"blocking"
参数,因此您可以 修改和取消请求。downloads.open
使您能够使用downloads.open()
API。tabHide
使您能够使用tabs.hide()
API。
activeTab 权限
此权限被指定为 "activeTab"
。如果扩展具有 activeTab
权限,那么当用户与扩展交互时,扩展将仅对活动标签授予额外权限。
“用户交互”包括
额外权限包括:
- 以编程方式将 JavaScript 或 CSS 注入选项卡(参见 加载内容脚本)。
- 访问当前选项卡的选项卡 API 特权部分:
Tab.url
、Tab.title
和Tab.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 数据库,而无需浏览器在创建数据库时提示用户请求权限。
示例
"permissions": ["*://mdn.org.cn/*"]
仅在 Manifest V2 中,请求对 developer.mozilla.org
下的页面特权访问。
"permissions": ["tabs"]
请求访问 tabs
API 的特权部分。
"permissions": ["*://mdn.org.cn/*", "tabs"]
仅在 Manifest V2 中,请求上述两个权限。
浏览器兼容性
BCD 表格仅在浏览器中加载