Chrome 浏览器插件 Manifest.json V3 中权限(Permissions)字段解析
一、权限(Permissions)
再使用拓展程序的 API 时,大多数的时候,需要在 manifest.json 文件中声明 permissions 字段。
一、权限类型
在 V3 版本中可以声明以下类别的权限:
permissions:- 包含下面
permissions权限列表中的项;
- 包含下面
optional_permissions:- 由用户在运行时(而不是在安装时)授予;
content_scripts.matches:- 包含一个或多个匹配模式,可允许内容脚本注入到一个或多个主机中;
host_permissions:- 包含一个或多个匹配模式,可提供对一个或多个主机的访问权限;
optional_host_permissions:- 由用户在运行时(而不是在安装时)授予。
如果您的扩展程序遭到恶意软件入侵,设置权限有助于限制对您的扩展程序造成的破坏。在安装之前或运行时,系统会向用户显示一些权限警告,以征求用户同意
二、Manifest.json 示例
{
"name": "Permissions Extension",
"permissions": [
"activeTab",
"contextMenus",
"storage"
],
"optional_permissions": [
"topSites",
],
"host_permissions": [
"https://www.developer.chrome.com/*"
],
"optional_host_permissions":[
"https://*/*",
"http://*/*"
],
"manifest_version": 3
}
三、主机权限(Host permissions)
主机权限允许扩展程序与网址的匹配格式进行交互。有些 Chrome API 不仅需要拥有自己的 API 权限,还需要主机权限。
需要主机权限的 API:
- 从扩展程序
Service Worker和扩展程序页面发出fetch()请求。 - 使用
chrome.tabs API读取和查询敏感的标签页属性(网址、标题和favIconUrl)。 - 以编程方式注入内容脚本。
- 使用
chrome.webRequest API监控和控制网络请求。 - 使用
chrome.cookies API访问Cookie。 - 使用
chrome.declarativeNetRequest API重定向和修改请求及响应标头。
四、包含警告的权限
如果扩展程序请求多项权限,并且其中的许多权限会在安装时显示警告,用户会看到警告列表
如果扩展程序只显示少量警告或向用户说明权限,用户更有可能信任该扩展程序。请考虑实现可选权限或功能略弱的 API,以避免收到警告。
在 host_permissions 和 content_scripts.matches 字段中添加或更改匹配模式也会触发警告。
1. 权限警告列表
| 权限 | 说明 | 警告 |
|---|---|---|
http://*/* https://*/* *://*/* <all_urls> |
对所有主机的访问权限 | 读取和更改在所有网站上的所有数据 |
https://HostName.com/ |
对 https://HostName.com/ 的访问权限 |
读取和更改在 HostName.com 上的数据 |
accessibilityFeatures.modify |
允许此扩展程序修改个别无障碍功能的状态 | 更改无障碍设置 |
accessibilityFeatures.read |
允许此扩展程序读取各个无障碍功能状态 | 查看无障碍设置 |
bookmarks |
对 chrome.bookmarks API 的访问权限 |
读取和更改书签 |
clipboardRead |
如果扩展程序使用 document.execCommand('paste'),则必须提供 |
读取复制和粘贴的数据 |
clipboardWrite |
表示该扩展程序使用 document.execCommand('copy') 或 document.execCommand('cut') |
修改复制和粘贴的数据 |
contentSettings |
对 chrome.contentSettings API 的访问权限 |
更改用于控制网站对 Cookie、JavaScript、插件、地理定位、麦克风、摄像头等功能的使用权限的设置。 |
debugger |
对 chrome.debugger API 的访问权限 |
访问页面调试程序后端 读取和更改在所有网站上的所有数据 |
declarativeNetRequest |
对 chrome.declarativeNetRequest API 的访问权限 |
屏蔽任何网页上的内容 |
declarativeNetRequestFeedback |
函数和事件的访问权限,这些函数和事件会返回匹配的声明式规则的相关信息 | 读取浏览记录 |
desktopCapture |
对 chrome.desktopCapture API 的访问权限 |
截取屏幕上的内容 |
downloads |
对 chrome.downloads API 的访问权限 |
管理下载内容 |
favicon |
对 Favicon API 的访问权限 |
读取访问的网站的图标 |
geolocation |
允许扩展程序在不提示用户授予权限的情况下使用 HTML5 geolocation API |
检测实际位置 |
history |
对 chrome.history API 的访问权限 |
读取和更改所有已登录设备上的浏览记录 |
identity.email |
通过 chrome.identity API 对电子邮件地址的访问权限 |
获取电子邮件地址 |
management |
对 chrome.management API 的访问权限 |
管理应用、扩展程序和主题背景 |
nativeMessaging |
对 Native Messaging API 的访问权限 |
与协作的原生应用通信 |
notifications |
对 chrome.notifications API 的访问权限 |
显示通知 |
pageCapture |
对 chrome.pageCapture API 的访问权限 |
读取和更改在所有网站上的所有数据 |
privacy |
对 chrome.privacy API 的访问权限 |
更改与隐私相关的设置 |
proxy |
对 chrome.proxy API 的访问权限 |
读取和更改在所有网站上的所有数据 |
readingList |
对 chrome.readingList API 的访问权限 |
读取和更改阅读清单中的条目 |
sessions 和 history |
对 chrome.sessionsAPI 和 chrome.history API 的访问权限 |
读取和更改所有已登录设备上的浏览记录 |
sessions 和 tabs |
对 chrome.sessions API 以及 Tab 对象的特权字段的访问权限 |
读取在所有已登录账号设备上的浏览记录 |
system.storage |
对 chrome.system.storage API 的访问权限 |
识别和弹出存储设备 |
tabCapture |
对 chrome.tabCapture API 的访问权限 |
读取和更改在所有网站上的所有数据 |
tabGroups |
对 chrome.tabGroups API 的访问权限 |
查看和管理标签页分组 |
tabs |
对多个 API(包括 chrome.tabs 和 chrome.windows)使用的 Tab 对象的特权字段的访问权限 |
读取浏览记录 |
topSites |
对 chrome.topSites API 的访问权限 |
读取最常访问的网站列表 |
ttsEngine |
对 chrome.ttsEngine API 的访问权限 |
朗读使用合成语音说出的所有文字 |
webAuthenticationProxy |
对 chrome.webAuthenticationProxy API 的访问权限 |
读取和更改在所有网站上的所有数据 |
webNavigation |
对 chrome.webNavigation API 的访问权限 |
读取浏览记录 |
五、权限列表
1. accessibilityFeatures.modify
允许扩展程序在使用 chrome.accessibilityFeatures API 时修改无障碍功能状态。
2. accessibilityFeatures.read
允许扩展程序在使用 chrome.accessibilityFeatures API 时读取无障碍功能状态。
3. activeTab
通过用户手势对活动标签页的临时访问权限。
4. alarms
对 chrome.alarms API 的访问权限。
5. audio
对 chrome.audio API 的访问权限。
6. background
让 Chrome 尽早启动(用户登录计算机、启动 Chrome 之前)和延迟关闭(即使最后一个窗口已关闭,直到用户明确退出 Chrome)。
7. bookmarks
对 chrome.bookmarks API 的访问权限。
8. browsingData
对 chrome.browsingData API 的访问权限。
9. certificateProvider
对 chrome.certificateProvider API 的访问权限。
10. contentSettings
对 chrome.contentSettings API 的访问权限。
11. contextMenus
对 chrome.contextMenus API 的访问权限。
12. cookies
对 chrome.cookies API 的访问权限。
13. debugger
对 chrome.debugger API 的访问权限。
14. declarativeContent
对 chrome.declarativeContent API 的访问权限。
15. declarativeNetRequest
对 chrome.declarativeNetRequest API 的访问权限。
16. declarativeNetRequestWithHostAccess
在需要主机权限时对 chrome.declarativeNetRequest API 的访问权限。
17. declarativeNetRequestFeedback
使用 chrome.declarativeNetRequest API 时向开发者工具控制台写入错误和警告的权限。
18. dns
对 chrome.dns API 的访问权限。
19. desktopCapture
对 chrome.desktopCapture API 的访问权限。
20. documentScan
对 chrome.documentScan API 的访问权限。
21. downloads
对 chrome.downloads API 的访问权限。
22. downloads.open
允许使用 chrome.downloads.open()。
23. downloads.ui
允许使用 chrome.downloads.setUiOptions()。
24. enterprise.deviceAttributes
对 chrome.enterprise.deviceAttributes API 的访问权限。
25. enterprise.hardwarePlatform
对 chrome.enterprise.hardwarePlatform API 的访问权限。
26. enterprise.networkingAttributes
对 chrome.enterprise.networkingAttributes API 的访问权限。
27. enterprise.platformKeys
对 chrome.enterprise.platformKeys API 的访问权限。
28. favicon
对 Favicon API 的访问权限。
29. fileBrowserHandler
对 chrome.fileBrowserHandler API 的访问权限。
30. fileSystemProvider
对 chrome.fileSystemProvider API 的访问权限。
31. fontSettings
对 chrome.fontSettings API 的访问权限。
32. gcm
对 chrome.gcm 和 chrome.instanceID API 的访问权限。
33. geolocation
允许扩展程序在不提示用户授予权限的情况下使用 geolocation API。
34. history
对 chrome.history API 的访问权限。
35. identity
对 chrome.identity API 的访问权限。
36. idle
对 chrome.idle API 的访问权限。
37. loginState
对 chrome.loginState API 的访问权限。
38. management
对 chrome.management API 的访问权限。
39. nativeMessaging
对 Native Messaging API 的访问权限。
40. notifications
对 chrome.notifications API 的访问权限。
41. offscreen
对 chrome.offscreen API 的访问权限。
42. pageCapture
对 chrome.pageCapture API 的访问权限。
43. platformKeys
对 chrome.platformKeys API 的访问权限。
44. power
对 chrome.power API 的访问权限。
45. printerProvider
对 chrome.printerProvider API 的访问权限。
46. printing
对 chrome.printing API 的访问权限。
47. printingMetrics
对 chrome.printingMetrics API 的访问权限。
48. privacy
对 chrome.privacy API 的访问权限。
49. processes
对 chrome.processes API 的访问权限。
50. proxy
对 chrome.proxy API 的访问权限。
51. runtime
对 runtime.connectNative() 和 runtime.sendNativeMessage() 的访问权限。对于 runtime 命名空间的所有其他功能,无需任何权限。
52. scripting
对 chrome.scripting API 的访问权限。
53. search
对 chrome.search API 的访问权限。
54. sessions
对 chrome.sessions API 的访问权限。
55. sidePanel
对 chrome.sidePanel API 的访问权限。
56. storage
对 chrome.storage API 的访问权限。
57. system.cpu
对 chrome.system.cpu API 的访问权限。
58. system.display
对 chrome.system.display API 的访问权限。
59. system.memory
对 chrome.system.memory API 的访问权限。
60. system.storage
对 chrome.system.storage API 的访问权限。
61. tabCapture
对 chrome.tabCapture API 的访问权限。
62. tabGroups
对 chrome.tabGroups API 的访问权限。
63. tabs
对多个 API(包括 chrome.tabs 和 chrome.windows)使用的 Tab 对象的特权字段的访问权限。
64. topSites
对 chrome.topSites API 的访问权限。
65. tts
对 chrome.tts API 的访问权限。
66. ttsEngine
对 chrome.ttsEngine API 的访问权限。
67. unlimitedStorage
针对 chrome.storage.local、IndexedDB 提供无限制的配额,
为 chrome.storage.local、IndexedDB、Cache Storage 和 Origin Private File System 提供无限制的配额。
68. vpnProvider
对 chrome.vpnProvider API 的访问权限。
69. wallpaper
对 chrome.wallpaper API 的访问权限。
70. webAuthenticationProxy
对 chrome.webAuthenticationProxy API 的访问权限。
71. webNavigation
对 chrome.webNavigation API 的访问权限。
72. webRequest
对 chrome.webRequest API 的访问权限。
73. webRequestBlocking
允许使用 chrome.webRequest API 进行屏蔽。
六、可选权限
1. 确定必需权限和可选权限
- 扩展程序可以声明必需权限和可选权限。
- 如果扩展程序的基本功能需要用到所需权限,请使用这些权限。
- 如果扩展程序中的可选功能需要用到可选权限,请使用这些权限。
- 必需权限的优点:
- 提示更少:扩展程序可以提示用户接受所有权限一次。
- 开发更简单:必要权限必定存在。
- 可选权限的优点:
- 安全性更高:由于用户仅启用所需的权限,因此扩展程序能够以更少的权限运行。
- 为用户提供更实用的信息:在用户启用相关功能时,扩展程序可以解释为什么它需要特定权限。
- 升级更轻松:升级扩展程序时,如果升级过程增加了可选权限而非必需权限,
Chrome不会为用户停用该扩展程序。
2. 在 Manifest.json 中声明可选权限
使用 optional_permissions 键在扩展程序清单中声明可选权限,格式与 permissions 字段相同:
{
"name": "My extension",
"optional_permissions": ["tabs"],
"optional_host_permissions": ["https://www.google.com/"],
}
2.1 无法指定为可选的权限
大多数 Chrome 扩展程序权限均可指定为可选权限,但以下权限除外。
debuggerdeclarativeNetRequest"devtoolsexperimentalgeolocationmdnsproxyttsttsEnginewallpaper
3. 请求可选权限
示例:
使用 permissions.request() 在 click 中请求权限:
document.querySelector('#my-button').addEventListener('click', (event) => {
// Permissions must be requested from inside a user gesture, like a button's
// 权限必须从用户手势内部请求,比如按钮
// click handler.
chrome.permissions.request({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (granted) => {
// The callback argument will be true if the user granted the permissions.
// 如果用户授予权限,则callback参数将为true。
if (granted) {
doSomething();
} else {
doSomethingElse();
}
});
});
4. 检查扩展程序的当前权限
如需检查扩展程序是否具有特定权限或一组权限,请使用 permission.contains():
chrome.permissions.contains({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (result) => {
if (result) {
// The extension has the permissions.
// 扩展具有相应的权限。
} else {
// The extension doesn't have the permissions.
}
});
5. 移除权限
如果不再需要某些权限,应将其移除。移除权限后,调用 permissions.request() 通常会在不提示用户的情况下重新添加该权限。
chrome.permissions.remove({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (removed) => {
if (removed) {
// The permissions have been removed.
// 权限已被移除。
} else {
// The permissions have not been removed (e.g., you tried to remove
// required permissions).
}
});
七、类型(Types)
1. Permissions 属性
1.1 origins
string[]选填- 主机权限的列表,包括清单中的
optional_permissions或permissions键中指定的权限,以及与内容脚本相关联的权限。
1.2 permissions
string[]选填- 已命名权限(不包括主机或源)的列表。
八、方法(Methods)
1. contains()
检查扩展程序是否具有指定权限。
1.1 示例
chrome.permissions.contains(
permissions:
Permissions,
callback?:
function,
)
1.2 参数
permissions: Permissionscallback: function可选(result: boolean) => void
1.3 返回
Promise<boolean>
如果扩展程序具有指定的权限,则为true。如果将某个来源同时指定为可选权限和内容脚本匹配模式,则返回false,除非同时授予这两项权限。
2. getAll()
获取扩展程序的当前权限集。
2.1 示例
chrome.permissions.getAll(
callback?:
function,
)
2.2 参数
callback: function可选(permissions: Permissions)=>void
2.3 返回
Promise<Permissions>
扩展程序的有效权限。
3. remove()
移除对指定权限的访问权限。
3.1 示例
chrome.permissions.remove(
permissions:
Permissions,
callback?:
function,
)
3.2 参数
permissions: Permissionscallback: function可选(removed: boolean)=>void
3.3 返回
Promise<boolean>
如果权限已移除,则为true。
4. request()
请求访问指定权限,必要时向用户显示提示。这些权限必须在清单的
optional_permissions字段中定义,或者是用户保留的必需权限。
4.1 示例
chrome.permissions.request(
permissions:
Permissions,
callback?:
function,
)
4.2 参数
permissions: Permissionscallback: function可选(granted: boolean)=>void
4.3 返回
Promise<boolean>
如果用户授予了指定的权限,则为true。
九、事件(Events)
1. onAdded
在扩展程序获取新权限时触发。
1.1 示例
chrome.permissions.onAdded.addListener(
callback:
function,
)
1.2 参数
callback: function
(permissions: Permissions)=>void
2. onRemoved
在移除扩展程序的权限时触发。
2.1 参数
callback: function
(permissions: Permissions)=>void
引用
Chrome 浏览器插件 Manifest.json V3 中权限(Permissions)字段解析的更多相关文章
- chrome浏览器插件启动本地应用程序
chrome浏览器插件启动本地应用程序 2014-04-20 00:04:30| 分类: 浏览器插件|举报|字号 订阅 下载LOFTER我的照片书 | chrome的插件开发这里就 ...
- chrome浏览器插件开发经验(一)
最近在进行chrome浏览器插件的开发,一些小的经验总结随笔. 1.首先,推荐360的chrome插件开发文档:http://open.chrome.360.cn/extension_dev/over ...
- 用Javascript编写Chrome浏览器插件
原文:http://homepage.yesky.com/62/11206062.shtml 用Javascript编写Chrome浏览器插件 2010-04-12 07:30 来源:天极网软件频道 ...
- Rest Client(Rest接口调试工具,有保存功配置功能) chrome浏览器插件
Rest Client(Rest接口调试工具,有保存功配置功能) chrome浏览器插件 下载地址 插件的操作很简单,下面是一些简单的实例. 1.安装 在谷歌应用商城搜索postman,如下图1-1所 ...
- 使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取
web scraper 下载:Web-Scraper_v0.2.0.10 使用 Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬 ...
- 强烈推荐 10 款珍藏的 Chrome 浏览器插件
Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠:但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具.那段时间,不少人开始推荐 Chrome 浏览 ...
- chrome浏览器插件window resizer调试webapp页面大小
chrome浏览器插件window resizer可以调整当前浏览器分辨率大小 可以自定义大小,以适合于andorid和iphone设备
- 还在为百度网盘下载速度太慢烦恼?chrome浏览器插件帮你解决!
百度网盘已然成为分享型网盘中一家独大的“大佬”了.时代就是这样不管你喜不喜欢,上网总会遇到些百度网盘共享的文件需要下载.然而,百度网盘对免费用户的限速已经到了“感人”的地步了,常常十多KB/秒的速度真 ...
- 利用Google Chrome开发插件,在网页中植入js代码
Google Chrome是一个很强大的浏览器,提供了各种各样的插件,大大提升了使用了的效率,比如vimium.honx等. Google在提供这些插件的同时还允许用户开发自己的插件. 最近在写js的 ...
- 先做一个用来测试的chrome浏览器插件
如何制作chrome插件 在项目汇报中,有同学提到了想要了解如何制作插件,特写该篇博客供大家查阅~ 一个简单的插件需要manifest.json.popup.html.popup.js.content ...
随机推荐
- #NIM游戏#CodeChef A Game With a Sheet of Paper
SHGAME 分析 可以发现每次相当于去掉上下左右的若干行列,也就是 \(x-1,n-1-x,y-1,m-1-y\) 题目就转换成了取石子的问题,先手必胜当且仅当 \((x-1)\) xor \((n ...
- 战码先锋直播预告丨参与ArkUI,共建OpenHarmony繁荣生态
OpenAtom OpenHarmony(以下简称"OpenHarmony")工作委员会首度发起「OpenHarmony开源贡献者计划」,旨在鼓励开发者参与OpenHarmony开 ...
- 寻找OpenHarmony「锦鲤」|万元豪礼+技术干货全是你的!
开源项目 OpenHarmony 是每个人的 OpenHarmony 战"码"先锋第二期蓄力出发! 同时,我们也推出了全网寻找开源锦鲤的活动 只为每一位参与OpenHarmony开 ...
- Linux 操作另一台服务器
服务器信任 在运维场景中,如果需要在一台服务器操作另一台服务器,就需要目标服务器(下面称为 B 服务器)信任当前服务器(下面称为 A 服务器). 在 A 服务器生成证书. ssh-keygen -t ...
- Quanto: PyTorch 量化工具包
量化技术通过用低精度数据类型 (如 8 位整型 (int8)) 来表示深度学习模型的权重和激活,以减少传统深度学习模型使用 32 位浮点 (float32) 表示权重和激活所带来的计算和内存开销. 减 ...
- 56.5K star的gpt4free开源项目到底真的假的?
前言 这个项目是我很早之前就star,只是当时觉得有点天真,怎么会有那么多免费的好事情呢?然后就在清明节前夕,OpenAI 开放了免登录即可使用GPT-3.5的模型,那么势必很快就有了免费使用GPT- ...
- Python scipy.ndimage.find_objects用法及代码示例
用法 scipy.ndimage.find_objects(input, max_label=0) 在标记数组中查找对象. 参数: input: 整数数组 包含由不同标签定义的对象的数组.值为 0 的 ...
- nginx重新整理——————http 模块中的请求过程[十一]
前言 简单介绍一下http的一些指令. 正文 一般http的嵌套规则是这样的: http{ upstream{} split_clients {} map{} gep{} server{ if(){} ...
- 低成本FPGA的MIPI测试GOWIN和LATTICE CROSSLINK
本次实验MIPI屏,2.0寸,分辨率是240*320 RGB888, 接口如下: 接上IO就是RST和MIPI的时钟和数据接口,另外就是电源和地. 一:GOWIN的测试方案 Gowin的案例中,首先是 ...
- 《Effective C#》系列之(一)——异常处理与资源管理
请注意,<Effective C#>中的异常处理与资源管理部分实际上是第四章的内容.以下是关于该章节的详细解释. 第四章:异常处理与资源管理 一. 了解异常处理机制 异常处理机制使程序员能 ...