#Chrome扩展程序开发教程--04:权限申请

引言

        本系列博客旨在带来最新的Chrome扩展程序开发入门教程。


1、基本介绍

        谷歌官方建议,将扩展程序所需要的权限分为两类:

  • 实现基本功能所需要的必须权限
  • 实现其它功能所需要的可选权限

        进行权限划分后,可以有以下好处:

  • 更安全,最小权限原则。
  • 更有说服力,只有当用户启用指定功能时才请求指定权限,让用户能够更好地理解需要授权的权限背后的含义。
  • 更容易升级,如果在新的版本中新增了必须权限,则 Chrome 会自动禁用该扩展,但新增可选权限不会。

2、权限相关属性

2.1、permissions

        声明必须权限,可能的取值有:

PermissionDescription
“activeTab”允许扩展程序访问当前激活的标签页的内容,以及在该标签页上执行一些操作,例如注入JavaScript代码或修改页面样式
“alarms”允许扩展程序在设定的时间间隔触发指定的事件或操作
“background”允许扩展程序在后台运行,并随时接收来自浏览器的事件和请求
“bookmarks”允许扩展程序访问和修改用户的书签,从而提供更多的功能和服务
“browsingData”允许扩展程序访问和控制用户的浏览数据,包括浏览历史、下载历史、cookie、表单数据、密码等
“certificateProvider”允许扩展程序代表用户管理和使用安装在浏览器中的数字证书
“clipboardRead”允许扩展读取用户的剪贴板上的数据,包括文本、图像等内容
“clipboardWrite”允许扩展程序将数据写入用户的剪贴板,可以方便用户在不同应用程序之间分享数据
“contentSettings”允许扩展程序管理和修改页面内容设置,例如JavaScript、Cookie、插件等设置
“contextMenus”允许扩展程序添加右键菜单,方便用户在页面上执行一些自定义操作
“cookies”允许扩展程序访问和管理浏览器的Cookie,例如添加、修改、删除等操作
“debugger”允许扩展程序访问和操作浏览器的调试工具,方便开发和调试扩展程序
“declarativeContent”允许扩展程序根据网页内容和事件对网页进行动态修改和操作
“declarativeNetRequest”允许扩展程序透明地修改网络请求,例如在请求发出前添加、修改、删除请求头、请求体等内容
“declarativeNetRequestWithHostAccess”允许扩展程序访问和操作网络请求的源主机信息
“declarativeNetRequestFeedback”允许扩展程序获取流量过滤器的状态,并向用户提供反馈
“declarativeWebRequest”允许扩展程序自定义网络请求的行为,例如修改请求头、修改响应体等
“desktopCapture”允许扩展程序捕获并共享屏幕内容,在实时视频、游戏教程等场景中有广泛应用
“documentScan”允许扩展程序访问和使用本地扫描仪,以便扫描和保存文档
“downloads”允许扩展程序管理Chrome浏览器的下载功能
“enterprise.deviceAttributes”允许扩展程序访问设备属性,例如设备名称、序列号、操作系统类型等
“enterprise.hardwarePlatform”允许扩展程序访问硬件平台信息,例如处理器类型、内存大小等
“enterprise.networkingAttributes”允许扩展程序访问网络属性,例如IP地址、Mac地址等
“enterprise.platformKeys”允许扩展程序使用平台密钥,以保护用户数据
“experimental”允许扩展程序使用实验性的API,这些API可能存在不稳定性、不兼容性等风险
“fileBrowserHandler”允许扩展程序在Chrome浏览器中打开本地文件
“fileSystemProvider”允许扩展程序在Chrome浏览器中访问本地文件系统
“fontSettings”允许扩展程序调整Chrome浏览器中的字体设置,包括字体大小和字体样式
“gcm”允许扩展程序访问Google Cloud Messaging服务,使扩展能够接收来自服务器或其它应用程序的推送通知
“geolocation”允许扩展程序访问定位服务,使得扩展能够获取用户的位置信息
“history”允许扩展程序访问用户的历史记录,使扩展能够查看已访问过的网页并在需要时使用
“identity”允许扩展程序获取用户身份,例如名字和邮箱地址,以使扩展能够提供更加个性化的服务
“idle”允许扩展程序检测用户的空闲状态,以便在用户不活动的时候暂停或降低扩展的资源消耗
“loginState”允许扩展程序访问当前用户的登录状态,以便在需要时提供特定的服务
“management”允许扩展程序管理和控制其它扩展的行为
“nativeMessaging”允许扩展程序在Chrome浏览器和本地应用程序之间进行通信
“notifications”允许扩展程序在Chrome浏览器中显示桌面通知
“offscreen”允许扩展程序在Chrome浏览器中离屏渲染
“pageCapture”允许扩展程序截取和保存整个网页,包括未下载的部分
“platformKeys”允许扩展程序管理和使用操作系统的加密功能
“power”允许扩展程序检测和管理计算机的电量和睡眠状态
“printerProvider”允许扩展程序管理和控制打印机
“printing”允许扩展程序访问和控制浏览器的打印机功能,使得扩展程序可以实现在浏览器中打印或打印预览等功能
“printingMetrics”允许扩展程序获取打印输出的统计信息
“privacy”允许扩展程序读取浏览器隐私设置
“processes”允许扩展程序访问浏览器进程相关信息
“proxy”允许扩展程序管理浏览器代理设置
“scripting”允许扩展程序注入JavaScript代码到网页中进行操作
“search”允许扩展程序在浏览器中进行搜索操作
“sessions”允许扩展程序管理浏览器会话设置
“storage”允许扩展程序在浏览器本地存储中读写数据
“system.cpu”允许扩展程序获取系统CPU的状态信息
“system.display”允许扩展程序获取显示设备的状态信息
“system.memory”允许扩展程序获取系统内存状态信息
“system.storage”允许扩展程序获取系统存储设备的状态信息
“tabCapture”允许扩展程序捕获当前标签页的屏幕截图或视频流
“tabGroups”允许扩展程序创建、管理和获取浏览器标签组信息
“tabs”允许扩展程序操作浏览器标签页,例如创建、删除、切换、获取信息等
“topSites”允许扩展程序访问浏览器的常用网站列表
“tts”允许扩展程序访问浏览器的语音合成功能,可以将文本转换成语音
“ttsEngine”允许扩展程序管理和使用第三方语音合成引擎
“unlimitedStorage”允许扩展程序在浏览器中使用无限制的本地存储空间
“vpnProvider”允许扩展程序管理浏览器的VPN连接
“wallpaper”允许扩展程序更改用户的Chrome浏览器桌面背景
“webNavigation”允许扩展程序跟踪和监视页面导航事件,例如当一个页面被加载、刷新或导航到新的URL时
“webRequest”允许扩展程序监视并修改所有传入和传出的网络请求。这可以用于屏蔽广告或旁路(bypass)某些安全限制或协议
“webRequestBlocking”与webRequest权限类似,但该权限允许扩展程序阻止某些网络请求。这可以用于屏蔽恶意网站或拦截广告

2.2、optional_permissions

        声明可选权限,需要在运行时由用户确认。除以下权限外所有的权限都可以作为可选权限。

PermissionDescription
“debugger”允许扩展程序访问和操作浏览器的调试工具,方便开发和调试扩展程序
“declarativeNetRequest”允许扩展程序透明地修改网络请求,例如在请求发出前添加、修改、删除请求头、请求体等内容
“devtools”允许扩展程序可以在浏览器的开发者工具(Developer Tools)中访问和修改页面的DOM结构和CSS样式,进行调试和测试。也可以使用Chrome的debugger API来执行JavaScript代码并在页面中展示相关信息。
“experimental”允许扩展程序使用实验性的API,这些API可能存在不稳定性、不兼容性等风险
“geolocation”允许扩展程序访问定位服务,使得扩展能够获取用户的位置信息
“mdns”允许扩展程序可以在本地网络中通过多播DNS(Multicast DNS)协议进行扫描和发现设备。比如,扩展程序可以搜索当前网络中的局域网设备,如打印机、路由器等,并提供相应的服务。mdns权限通常用于局域网设备的管理和监控。
“proxy”允许扩展程序管理浏览器代理设置
“tts”允许扩展程序访问浏览器的语音合成功能,可以将文本转换成语音
“ttsEngine”允许扩展程序管理和使用第三方语音合成引擎
“wallpaper”允许扩展程序更改用户的Chrome浏览器桌面背景

2.3、host_permissions

        声明必须 host 权限,允许扩展程序访问的目标网站。如以下所示:

{
  ...
  "host_permissions": [
    "https://www.blogger.com/",
    "https://*.google.com/"
  ],
  ...
}

2.4、optional_host_permissions

        声明可选 host 权限,需要在运行时由用户确认。如以下所示:

{
  ...
  "optional_host_permissions": [
    "https://*/*",
    "http://*/*"
  ],
  ...
}

3、申请权限

        1.不管是什么权限,都需要在 manifest.json 中声明,如下所示:

{
  ...
  "permissions": [
    "tabs",
    "bookmarks",
    "unlimitedStorage"
  ],
  "optional_permissions": [
    "unlimitedStorage"
  ],
  "host_permissions": [
    "https://www.blogger.com/",
    "https://*.google.com/"
  ],
  "optional_host_permissions": [
    "https://*/*",
    "http://*/*"
  ],
  ...
}

        2.如果是必须权限,声明完就可以了,但如果是可选权限,则还需要在代码中请求用户授权。

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.
    if (granted) {
      doSomething();
    } else {
      doSomethingElse();
    }
  });
});

4、检查权限

        可以通过以下代码检查扩展程序当前是否拥有指定权限:

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、移除权限

        可以通过以下代码移除已获取的权限:

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).
  }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值