引言

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


1、基本介绍

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

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

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

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

2、权限相关属性

2.1、permissions

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

Permission Description
“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

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

Permission Description
“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).
  }
});
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐