一、权限(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_permissionscontent_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 的访问权限 更改用于控制网站对 CookieJavaScript、插件、地理定位、麦克风、摄像头等功能的使用权限的设置。
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 的访问权限 读取和更改阅读清单中的条目
sessionshistory chrome.sessionsAPIchrome.history API 的访问权限 读取和更改所有已登录设备上的浏览记录
sessionstabs chrome.sessions API 以及 Tab 对象的特权字段的访问权限 读取在所有已登录账号设备上的浏览记录
system.storage chrome.system.storage API 的访问权限 识别和弹出存储设备
tabCapture chrome.tabCapture API 的访问权限 读取和更改在所有网站上的所有数据
tabGroups chrome.tabGroups API 的访问权限 查看和管理标签页分组
tabs 对多个 API(包括 chrome.tabschrome.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.gcmchrome.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.tabschrome.windows)使用的 Tab 对象的特权字段的访问权限。

64. topSites

chrome.topSites API 的访问权限。

65. tts

chrome.tts API 的访问权限。

66. ttsEngine

chrome.ttsEngine API 的访问权限。

67. unlimitedStorage

针对 chrome.storage.localIndexedDB 提供无限制的配额,

chrome.storage.localIndexedDBCache StorageOrigin 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 扩展程序权限均可指定为可选权限,但以下权限除外。

  • debugger
  • declarativeNetRequest"devtools
  • experimental
  • geolocation
  • mdns
  • proxy
  • tts
  • ttsEngine
  • wallpaper

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_permissionspermissions 键中指定的权限,以及与内容脚本相关联的权限。

1.2 permissions

  • string[] 选填
  • 已命名权限(不包括主机或源)的列表。

八、方法(Methods

1. contains()

检查扩展程序是否具有指定权限。

1.1 示例

chrome.permissions.contains(
permissions:
Permissions,
callback?:
function,
)

1.2 参数

  • permissions: Permissions
  • callback: 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: Permissions
  • callback: 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: Permissions
  • callback: 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)字段解析的更多相关文章

  1. chrome浏览器插件启动本地应用程序

    chrome浏览器插件启动本地应用程序 2014-04-20 00:04:30|  分类: 浏览器插件|举报|字号 订阅     下载LOFTER我的照片书  |     chrome的插件开发这里就 ...

  2. chrome浏览器插件开发经验(一)

    最近在进行chrome浏览器插件的开发,一些小的经验总结随笔. 1.首先,推荐360的chrome插件开发文档:http://open.chrome.360.cn/extension_dev/over ...

  3. 用Javascript编写Chrome浏览器插件

    原文:http://homepage.yesky.com/62/11206062.shtml 用Javascript编写Chrome浏览器插件 2010-04-12 07:30 来源:天极网软件频道 ...

  4. Rest Client(Rest接口调试工具,有保存功配置功能) chrome浏览器插件

    Rest Client(Rest接口调试工具,有保存功配置功能) chrome浏览器插件 下载地址 插件的操作很简单,下面是一些简单的实例. 1.安装 在谷歌应用商城搜索postman,如下图1-1所 ...

  5. 使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取

    web scraper 下载:Web-Scraper_v0.2.0.10 使用 Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬 ...

  6. 强烈推荐 10 款珍藏的 Chrome 浏览器插件

    Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠:但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具.那段时间,不少人开始推荐 Chrome 浏览 ...

  7. chrome浏览器插件window resizer调试webapp页面大小

    chrome浏览器插件window resizer可以调整当前浏览器分辨率大小 可以自定义大小,以适合于andorid和iphone设备

  8. 还在为百度网盘下载速度太慢烦恼?chrome浏览器插件帮你解决!

    百度网盘已然成为分享型网盘中一家独大的“大佬”了.时代就是这样不管你喜不喜欢,上网总会遇到些百度网盘共享的文件需要下载.然而,百度网盘对免费用户的限速已经到了“感人”的地步了,常常十多KB/秒的速度真 ...

  9. 利用Google Chrome开发插件,在网页中植入js代码

    Google Chrome是一个很强大的浏览器,提供了各种各样的插件,大大提升了使用了的效率,比如vimium.honx等. Google在提供这些插件的同时还允许用户开发自己的插件. 最近在写js的 ...

  10. 先做一个用来测试的chrome浏览器插件

    如何制作chrome插件 在项目汇报中,有同学提到了想要了解如何制作插件,特写该篇博客供大家查阅~ 一个简单的插件需要manifest.json.popup.html.popup.js.content ...

随机推荐

  1. USACO 4.1

    目录 洛谷 2737 麦香牛块 分析 代码 洛谷 2738 篱笆回路 分析 代码 麦香牛块洛谷传送门,麦香牛块USACO传送门,篱笆回路洛谷传送门,篱笆回路USACO传送门 洛谷 2737 麦香牛块 ...

  2. #离线,倒序,线段树#Comet OJ - Contest #15 E 栈的数据结构题

    题目 初始时有 \(N\) 个空的栈,编号为 \(1 \sim N\),有以下三种类型的指令: push \(L\) \(R\) \(v\):把编号 \(L \sim R\) 这连续 \(R-L+1\ ...

  3. #主席树,fread,fwrite#洛谷 1972 [SDOI2009]HH的项链

    题目 分析 维护每个位置的后继,问题转换为后继在区间外的位置的个数, 但是这题太卡常了,所以我就加了fread和fwrite 其实树状数组的解法我也写过了 代码 #include <cstdio ...

  4. #主席树,dsu on tree,树上倍增#洛谷 3302 [SDOI2013]森林

    题目 分析 第\(k\)大的问题可以用主席树解决, 下标为节点离散化后的权值, 连边操作考虑合并两棵树, 如果暴力合并那肯定会T飞,考虑启发式合并 同时维护子树内的lca,方便主席树的查询 代码 #i ...

  5. #网络流,二分#洛谷 3324 [SDOI2015]星际战争

    题目 分析 二分答案,然后建图判断可行性 代码 #include <cstdio> #include <cctype> #include <queue> #defi ...

  6. HarmonyOS Codelab 优秀样例——溪村小镇(ArkTS)

    一.  介绍 溪村小镇是一款展示溪流背坡村园区风貌的应用,包括园区内的导航功能,小火车行车状态查看,以及各区域的风景展览介绍,主要用于展示HarmonyOS的ArkUI能力和动画效果.具体包括如下功能 ...

  7. Python 爬虫之 xpath

    0x01 XML 基础 xpath 是在 XML 文档中搜索内容的一门语言 HTML 是 XML 的一个子集 XML 代码举例: <book> <isbn>978xxxxxxx ...

  8. spring cloud 学习笔记 客户端(本地)均衡负载(三)

    前言 在微服务中,一个服务可能即是服务端也是客户端,当别的服务调用该服务的时候这个服务就是服务端,当这个服务主动调用另外一个服务的时候,那么就是服务端. 作为客户端通过服务注册与发现获取某个服务的注册 ...

  9. Deep Learning on Graphs: A Survey第五章自动编码论文总结

    论文地址:https://arxiv.org/pdf/1812.04202.pdf 最近老师让我们读的一片论文,已经开组会讲完了,我负责的是第五章,图的自动编码,现在再总结一遍,便于后者研读.因为这篇 ...

  10. 如何基于香橙派AIpro对视频/图像数据进行预处理

    本文分享自华为云社区<如何基于香橙派AIpro对视频/图像数据进行预处理>,作者: 昇腾CANN. 受网络结构和训练方式等因素的影响,绝大多数神经网络模型对输入数据都有格式上的限制.在计算 ...