Skip to content

权限

浏览器扩展权限在概念上与移动应用权限相同。这两个软件平台都有能力访问非常强大的 API,但为了保护终端用户,访问这些 API 的权限必须逐项明确请求。对于应用和扩展,权限均由开发者在代码库中声明——对于扩展来说,这就是扩展的 manifest 文件。在这两种情况下,请求访问次要权限不需要用户明确许可,但访问非常强大的权限则需要用户明确授予权限。此外,在后续更新中添加额外权限通常需要用户明确接受这种权限范围的变更。

在构建浏览器扩展时,仔细选择权限至关重要。这会影响扩展在市场中的列表展示方式、扩展的安装和更新流程,以及扩展在市场中的审核方式。

权限基础

为了解添加权限的基础知识,让我们来看一个需要权限的简单场景。从以下扩展开始: 示例 12-1a. manifest.json

json
{
  "name": "MVX",
  "version": "0.0.1",
  "manifest_version": 3,
  "options_ui": {
    "open_in_tab": true,
    "page": "options.html"
  }
}

示例 12-1b. options.html

html
<!DOCTYPE html>
<html>
  <body>
    <script src="options.js"></script>
  </body>
</html>

示例 12-1c. options.js

javascript
chrome.storage.sync.set({ foo: "bar" });

这个非常简单的扩展包含一个选项页面,当该页面打开时,会尝试将一个虚拟值写入浏览器存储。

注意
本示例使用选项页面的原因有两个:

  1. 便于访问控制台并重新加载脚本;
  2. 如果在事件循环的第一轮中后台页面抛出错误,浏览器会将服务工作线程标记为永久空闲状态,并拒绝打开后台工作线程开发者工具。

加载此扩展并打开选项页面后,您将在浏览器控制台中看到以下内容(图 12-1)。 12-1

出现该错误的原因是,chrome.storage API 需要 storage 权限。由于未请求该权限,浏览器根本不会在 chrome 全局对象上定义 storage 属性,因此尝试调用 sync() 时会抛出上述错误。

这可能会让您感到意外,因为整个扩展都已成功加载。需要了解的是,浏览器在加载扩展时不会假设可能需要哪些权限,也不会假设代码库中是否真的需要请求的权限。所有权限处理都是在运行时进行的。

要修复此示例,只需添加 storage 权限,如下所示:

示例 12-2. 添加了 storage 权限的 manifest.json

json
{
  "name": "MVX",
  "version": "0.0.1",
  "manifest_version": 3,
  "options_ui": {
    "open_in_tab": true,
    "page": "options.html"
  },
  "permissions": ["storage"]
}

重新加载扩展后,选项页面将不再抛出错误。这是因为您已成功添加了使用 chrome.storage API 所需的权限。

检查权限

您可以通过 chrome.permissions.getAll() 方法以编程方式读取当前执行上下文可访问的所有权限。更新上面的 options.js 脚本,以记录扩展的权限:

示例 12-3. options.js

javascript
chrome.storage.sync.set({ foo: "bar" });
chrome.permissions.getAll().then(console.log);

重新加载扩展并重新加载选项页面后,将得到如图 12-2 所示的结果。 12-2注意:一旦授予,可选权限(将在后续章节中介绍)与必需权限没有区别,因此 chrome.permissions.getAll() 会计算所有必需权限和可选权限的合并列表。

使用可选权限

顾名思义,可选权限是可以选择性地向用户请求的权限。可选权限主要用于以下两种场景:

• 在扩展首次加载时请求的权限,但这些权限并非扩展正常运行所必需。这类似于移动应用程序在首次打开时请求访问您的位置。

• 仅在用户执行某些触发请求的操作后才请求的权限,例如点击“连接到 foobar.com”按钮。这类似于移动应用程序在您点击“分享图片”按钮后才请求访问设备中的照片。

可选权限在以下情况下非常有用:

• 您希望允许用户对扩展有更多控制权,例如允许他们关闭某些权限,但仍能使用扩展的一些功能。

• 您已经发布了一个扩展,但希望添加更多权限,而无需强制用户重新启用扩展。

• 您希望减少用户在安装扩展后看到的扩展警告数量。

通过声明式与命令式获取权限

普通的网页浏览器权限可以通过声明式方式获取,但可选的扩展权限必须通过命令式方式获取。考虑以下在网页中运行的常规 JavaScript 示例:

javascript
navigator.geolocation.getCurrentPosition(() => {})

默认情况下,网页浏览器的地理定位 API 是无法访问的,用户必须授予访问权限。然而,该 API 的设计使得只需调用此方法,就会弹出一个对话框提示用户授予权限;如果用户授予权限,脚本就可以继续执行,就好像权限从一开始就被授予了一样。

与本章开头的扩展示例形成对比的是:在没有权限的情况下调用方法只会抛出一个错误,没有任何补救措施。在使用需要可选权限的 API 方法时,您必须使用权限 API 检查扩展是否具有权限,如果未授予权限,则请求权限,然后才能继续进行需要权限的 API 调用。以下示例演示了这一点:

示例 12-4a. manifest.json

json
{
  "name": "MVX",
  "version": "0.0.1",
  "manifest_version": 3,
  "options_ui": {
    "open_in_tab": true,
    "page": "options.html"
  },
  "optional_permissions": ["storage"]
}

示例 12-4b. options.html

html
<!DOCTYPE html>
<html>
  <body>
    <button id="save">Save</button>
    <script src="options.js"></script>
  </body>
</html>

示例 12-4c. options.js

javascript
const permissions = { permissions: ["storage"] };
document.querySelector("#save").addEventListener(
  "click",
  async () => {
    if (!(await chrome.permissions.contains(permissions))) {
      await chrome.permissions.request(permissions);
    }
    chrome.storage.sync.set({ foo: "bar" });
  }
);

权限请求的幂等性

前面的示例可以进一步简化。请求权限是幂等的,因此您可以每次都简单地调用 request(),而不会产生任何问题:

javascript
document.querySelector("#save").addEventListener(
  "click",
  async () => {
    await chrome.permissions.request(permissions);
    chrome.storage.sync.set({ foo: "bar" });
  }
);

主机权限

从 manifest v3 开始,permissionshost_permissions 被拆分为单独的字段,optional_permissionsoptional_host_permissions 也进行了镜像拆分。从概念上讲,区别很简单:permissions 是您需要访问的 API,而 host_permissions 是您需要使用这些 API 的来源。正如在扩展清单章节中讨论的那样,主机权限列表有效地创建了一个具有额外权限的域名的白名单。

根据 MDN 的说法,与白名单匹配的来源会授予以下访问权限:

  • 对这些来源的 XMLHttpRequestfetch 访问权限,不受跨域限制(即使请求是从内容脚本发出的)
  • 在没有 tabs 权限的情况下读取特定标签页元数据的能力,例如 Tab 对象的 urltitlefavIconUrl 属性
  • 使用 tabs.executeScript() 以编程方式将脚本注入到从这些来源提供的页面中的能力
  • 只要同时包含 cookies API 权限,就可以使用 cookies API 访问该主机的 cookie 的能力
  • 绕过指定为完整域名或使用通配符的主机的扩展页面跟踪保护的能力。然而,内容脚本只能绕过指定为完整域名的主机的跟踪保护

检查和请求 optional_permissionsoptional_host_permissions 之间的唯一区别是使用 origins 属性而不是 permissions 属性。例如,检查 google.com 来源的方式如下:

javascript
chrome.permissions.contains({ origins: ["*://*.google.com"] })

权限生命周期

一旦授予权限,扩展在整个生命周期内都拥有该权限。然而,用户可以通过浏览器的扩展管理页面明确撤销该权限。如果扩展被卸载然后重新安装,则以前授予的所有可选权限都将丢失。

权限警告

对于 alarmsstorage 等权限,它们启用的 API 对用户的影响很小,因此可以静默访问。相反,某些权限非常强大,因此需要用户明确授予扩展访问权限。这以一个对话框的形式出现,其中包含权限含义的描述。例如,以下是在 Google Chrome 中请求 tabs 权限时显示的内容(图 12-3)。 12-3

permissionshost_permissions 列表会在安装后立即显示警告对话框,且在扩展执行任何代码之前显示。如果权限被拒绝,扩展将不会安装。
对于 optional_permissionsoptional_host_permissions,警告仅在扩展请求这些权限时显示。如果权限被拒绝,扩展将继续像之前一样运行,不会获得额外权限。
注意:与 HTML5 权限不同,如果初始时拒绝了可选权限,扩展可以再次请求该权限。

测试权限警告

在开发扩展程序时,您会注意到,在初次安装扩展程序时,加载未打包的扩展程序不会显示权限警告对话框。
(可选权限仍会显示警告对话框。)
当然,这是为了避免开发者在反复安装未完成的扩展程序时感到厌烦。

manifest.json - 用于生成权限警告对话框的简单单文件浏览器扩展程序示例

json
{
  "name": "MVX",
  "version": "0.0.1",
  "manifest_version": 3,
  "permissions": ["tabs"]
}

若要查看安装时的权限警告对话框,您需要将扩展程序打包为 .crx 文件,然后将其加载到浏览器中。
• 在扩展程序管理页面中点击“打包扩展程序”(图 12-4)。
• 选择扩展程序文件夹(与加载未打包扩展程序时选择的文件夹相同)(图 12-5)。
• 将 .pem 字段留空。
• 浏览器将生成两个文件,一个是 .crx 文件,另一个是 .pem 文件。
• 将 .crx 文件拖放到扩展程序管理页面中进行安装。如果操作正确,浏览器将提示您权限警告对话框。(图 12-6 和 12-7)
• 删除生成的这两个文件,它们已无其他用途。 12-412-512-6

注意:过去,可以使用 .crx 文件直接安装并使用扩展程序——但现在已不再支持这种方式。尽管 .crx 文件仍可用于测试权限警告(如上述步骤所示),但您会发现,使用 .crx 文件安装的扩展程序会被 Chrome 永久禁用。

12-7

已发布扩展程序的注意事项

在将扩展程序发布到市场时,您选择的权限可能会对代码库之外的内容产生影响。

触发慢速审核队列

在开发扩展程序时,您可能无法自主选择所需的权限。毕竟,扩展程序的需求是绝对的,而使其正常运行所需的权限也由此而来。然而,如果扩展程序的审核速度对您来说很重要,那么您需要了解的是,要求某些权限(如 <all_urls>)会导致您的扩展程序被放入慢速审核队列。

提示:根据我的经验,此队列会将您的扩展程序审核时间从不到 24 小时延长至数天。

自动禁用更新

一个极为重要的考虑因素是,当在扩展程序更新中添加会显示警告的必需权限时会发生什么。浏览器会在后台静默更新扩展程序,因此它不会在更新安装后立即显示警告对话框。相反,它会静默禁用该扩展程序,并在浏览器工具栏中添加一个小通知,提示需要采取操作。要重新启用该扩展程序,用户必须打开此通知并接受新权限(图 12-8 和 12-9)。流程如下所述。 12-812-9

权限列表

以下是所有权限的列表,包括它们启用的功能以及可能引发的警告消息(如果有的话)。

注意:此权限列表包含来自不同浏览器供应商和不同清单版本的权限值。某些权限可能已被弃用。

注意:为保持一致性,API 显示在 chrome 命名空间中。此命名空间在所有基于 Chromium 的浏览器和 Firefox 中均有效。

activeTab

activeTab 权限常被误解——这在很大程度上要归咎于其名称。扩展程序开发者遇到了以下问题:

  • 扩展程序仅需要访问“活动标签页”,即浏览器当前聚焦的标签页。
  • 扩展程序需要访问活动标签页,无论其域名如何,但不想引发令人反感的“读取和更改您访问的网站上的所有数据”警告消息。
  • 扩展程序仅需要临时访问活动标签页。

由此,activeTab 权限应运而生。此权限不允许访问任何新内容:请求 <all_urls> 权限会使 activeTab 权限变得毫无意义。然而,通过请求 activeTab 而不是 <all_urls>,扩展程序在有限的一组用户交互后会被授予额外权限,而不会向用户显示任何警告。

允许的用户交互包括:

  • 执行操作
  • 执行上下文菜单项
  • 执行键盘快捷键命令
  • 接受 Omnibox API 提供的建议

一旦发生这些用户交互之一,扩展程序将临时获得该标签页的以下额外权限:

  • 在活动标签页上调用 scripting.executeScript()scripting.insertCSS()
  • 通过返回 tabs.Tab 对象的 API 获取该标签页的 URL、标题和收藏夹图标(本质上与 tabs 权限相同)。
  • 使用 webRequest API 拦截该标签页中的网络请求,以访问该标签页主框架的源。扩展程序临时获得该标签页主框架源的主机权限。

这些额外权限仅持续到该标签页被导航或关闭为止。此权限在基于 Chromium 的浏览器和 Firefox 中均可用。

alarms

  • 授予您的扩展程序访问 chrome.alarms API 的权限
  • 在基于 Chromium 的浏览器和 Firefox 中可用

background

  • 使 Chrome 提前启动并延迟关闭,以便扩展程序可以拥有更长的生命周期
  • 在基于 Chromium 的浏览器和 Firefox 中可用

当任何已安装的扩展程序具有 background 权限时,Chrome 会在用户登录计算机后立即作为后台进程运行,并在用户启动 Chrome 之前运行。background 权限还使 Chrome 在其最后一个窗口关闭后继续运行,直到用户明确退出 Chrome。

background 权限的预期用途是使后台脚本能够在不绑定到浏览器窗口生命周期的情况下执行有用的工作。

bookmarks

  • 授予您的扩展程序访问 chrome.bookmarks API 的权限
  • 在基于 Chromium 的浏览器和 Firefox 中可用
  • Chrome 警告消息:“读取和更改您的书签”
  • Firefox 警告消息:“读取和修改书签”

browserSettings

  • 启用扩展程序修改某些全局浏览器设置。此 API 的每个属性都是一个 BrowserSetting 对象,提供修改特定设置的能力
  • 在 Firefox 中可用
  • Firefox 警告消息:“读取和修改浏览器设置”

browsingData

  • 授予您的扩展程序访问 chrome.browsingData API 的权限
  • 在基于 Chromium 的浏览器和 Firefox 中可用
  • Firefox 警告消息:“清除最近的浏览历史记录、Cookie 和相关数据”

captivePortal

  • 确定用户连接的捕获门户状态。捕获门户是用户首次连接到 Wi-Fi 网络时显示的网页
  • 在 Firefox 中可用

certificateProvider

  • 授予您的扩展程序访问 chrome.certificateProvider API 的权限
  • 在基于 Chromium 的浏览器中可用

clipboardRead

  • 如果扩展程序使用 document.execCommand('paste'),则必需
  • 在基于 Chromium 的浏览器和 Firefox 中可用
  • Chrome 警告消息:“读取您复制和粘贴的数据”
  • Firefox 警告消息:“从剪贴板获取数据”

clipboardWrite

  • 表示扩展程序使用 document.execCommand('copy')document.execCommand('cut')
  • 在基于 Chromium 的浏览器和 Firefox 中可用
  • Chrome 警告消息:“修改您复制和粘贴的数据”
  • Firefox 警告消息:“将数据输入到剪贴板”

contentSettings

  • 授予您的扩展程序访问 chrome.contentSettings API 的权限
  • 在基于 Chromium 的浏览器和 Firefox 中可用
  • Chrome 警告消息:“更改控制网站访问功能的设置,例如 Cookie、JavaScript、插件、地理位置、麦克风、摄像头等”

contextMenus

  • 授予您的扩展程序访问 chrome.contextMenus API 的权限
  • 在基于 Chromium 的浏览器和 Firefox 中可用

contextualIdentities

  • 列出、创建、删除和更新上下文身份,更常见的是“容器”
  • 在 Firefox 中可用

cookies

  • 授予您的扩展程序访问 chrome.cookies API 的权限
  • 在基于 Chromium 的浏览器和 Firefox 中可用

debugger

  • 授予您的扩展程序访问 chrome.debugger API 的权限
  • 在基于 Chromium 的浏览器和 Firefox 中可用
  • 多个 Chrome 警告消息:
  • “访问页面调试器后端”
  • “读取和更改您访问的网站上的所有数据”

declarativeContent

  • 授予您的扩展程序访问 chrome.declarativeContent API 的权限
  • 在基于 Chromium 的浏览器中可用

declarativeNetRequest

  • 授予您的扩展程序访问 chrome.declarativeNetRequest API 的权限
  • 在基于 Chromium 的浏览器中可用
  • Chrome 警告消息:“阻止页面内容”

declarativeNetRequestFeedback

  • 授予扩展程序访问 chrome.declarativeNetRequest API 中的事件和方法的权限,这些事件和方法返回有关匹配的声明性规则的信息
  • 在基于 Chromium 的浏览器中可用

declarativeWebRequest

  • 授予您的扩展程序访问 chrome.declarativeWebRequest API 的权限
  • 在基于 Chromium 的浏览器中可用

desktopCapture

  • 授予您的扩展程序访问 chrome.desktopCapture API 的权限
  • 在基于 Chromium 的浏览器中可用
  • Chrome 警告消息:“捕获屏幕内容”

Devtools page

  • 从技术上讲,这不是一个权限,这是在清单中使用 devtools_page 时在 Firefox 中显示的额外警告
  • Firefox 警告消息:“扩展开发人员工具以访问打开标签页中的数据”

dns

documentScan

  • 授予您的扩展程序访问 chrome.documentScan API 的权限
  • 在基于 Chromium 的浏览器中可用

downloads

- 授予扩展程序访问 `chrome.downloads` API 的权限
- 适用于 Chromium 浏览器和 Firefox
- Chrome 警告信息:“管理您的下载”
- Firefox 警告信息:“下载文件以及读取和修改浏览器的下载历史记录”
  • downloads.open
    • 授予扩展程序仅访问 chrome.downloads.open API 的权限
    • 适用于 Chromium 浏览器
    • Chrome 警告信息:“打开已下载的文件”
    • Firefox 警告信息:“打开下载到计算机的文件”

enterprise.deviceAttributes

- 授予扩展程序访问 `chrome.enterprise.deviceAttributes` API 的权限
- 适用于 Chromium 浏览器
  • enterprise.hardwarePlatform
    • 授予扩展程序访问 chrome.enterprise.hardwarePlatform API 的权限
    • 适用于 Chromium 浏览器
  • enterprise.networkingAttributes
    • 授予扩展程序访问 chrome.enterprise.networkingAttributes API 的权限
    • 适用于 Chromium 浏览器
  • enterprise.platformKeys
    • 授予扩展程序访问 chrome.enterprise.platformKeys API 的权限
    • 适用于 Chromium 浏览器

实验性权限

  • experimental
    • 如果扩展程序使用任何 chrome.experimental.* API,则需要此权限
    • 适用于 Chromium 浏览器

文件相关权限

  • fileBrowserHandler
    • 授予扩展程序访问 chrome.fileBrowserHandler API 的权限
    • 适用于 Chromium 浏览器
  • fileSystemProvider
    • 授予扩展程序访问 chrome.fileSystemProvider API 的权限
    • 适用于 Chromium 浏览器

其他权限

  • find
    • 启用扩展程序在网页中查找文本并使用查找 API 突出显示匹配项
    • 适用于 Firefox
    • Firefox 警告信息:“读取所有打开标签页的文本”
  • fontSettings
    • 授予扩展程序访问 chrome.fontSettings API 的权限
    • 适用于 Chromium 浏览器
  • gcm
    • 授予扩展程序访问 chrome.gcm API 的权限
    • 适用于 Chromium 浏览器
  • geolocation
    • 允许扩展程序在不提示用户的情况下使用 HTML5 地理位置 API
    • 适用于 Chromium 浏览器和 Firefox
    • Chrome 警告信息:“检测您的物理位置”
    • Firefox 警告信息:“访问您的位置”

历史记录权限

  • 功能:授予扩展程序访问 chrome.history API 的权限
  • 适用范围:适用于 Chromium 浏览器和 Firefox
  • 警告信息
    • Chrome:“读取和更改您的浏览历史记录”
    • Firefox:“访问浏览历史记录”

主机权限

主机权限可以全局请求,也可以仅针对一部分主机请求。这些权限可以在所有浏览器上请求,显示的警告信息可能有多种不同形式。

注意,通过使用 activeTab 权限,有可能避免声明任何主机权限。

全局主机权限

全局主机权限意味着扩展程序可以访问具有允许协议的每个主机。这适用于需要始终管理浏览器的所有页面和流量的扩展程序。有几种不同的方式可以请求此权限,但它们的效果相同:

  • http://*/*
  • https://*/*
  • *://*/*
  • <all_urls>

这将显示以下警告信息:

  • Chrome 警告信息:“读取和更改您在访问的网站上的所有数据”
  • Firefox 警告信息:“访问您所有网站的数据”

如果您的扩展程序使用此权限,在提交到扩展程序市场时,您的扩展程序将被放入人工审核队列。因此,审批时间将显著延长。

提示:部分主机权限意味着扩展程序只能访问与一个或多个匹配器匹配的主机。这适用于事先知道需要管理或通信的主机集的扩展程序。

注意,请参阅扩展程序清单章节,了解匹配器的工作原理。

显示的警告会根据覆盖的主机数量而有所不同。针对 foobar.com 的简单单个主机匹配器将显示以下警告:

  • Chrome 警告信息:“读取和更改您在 foobar.com 上的数据”
  • Firefox 警告信息:“授予扩展程序访问 https://foobar.com 的权限”

如果覆盖的主机不止一个,浏览器会根据覆盖的主机数量调整警告信息。例如,Firefox 还将显示以下消息:

  • 访问 [命名] 域中的网站数据
  • 访问 # 个其他域中的数据
  • 访问 [命名网站] 的数据
  • 访问 # 个其他网站的数据

identity

  • 授予扩展程序访问 chrome.identity API 的权限
  • 适用于 Chromium 浏览器和 Firefox

idle

loginState

  • 授予扩展程序访问 chrome.loginState API 的权限
  • 适用于 Chromium 浏览器

management

  • 授予扩展程序访问 chrome.management API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“管理您的应用程序、扩展程序和主题”
  • Firefox 警告信息:“监控扩展程序使用情况并管理主题”
  • 使用 menus API 向浏览器的菜单系统添加项目
  • 适用于 Firefox

注意:此 API 以 Chrome 的 contextMenus API 为模型,后者使 Chrome 扩展程序能够向浏览器的上下文菜单添加项目。menus API 为 Chrome 的 API 添加了一些功能。

  • 隐藏所有默认的 Firefox 菜单项,改为提供自定义上下文菜单 UI
  • 适用于 Firefox

nativeMessaging

  • 授予扩展程序访问本地消息传递 API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“与合作的本地应用程序通信”
  • Firefox 警告信息:“与 Firefox 以外的程序交换消息”

notifications

  • 授予扩展程序访问 chrome.notifications API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“显示通知”
  • Firefox 警告信息:“向您显示通知”

pageCapture

  • 授予扩展程序访问 chrome.pageCapture API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“读取和更改您在访问的网站上的所有数据”

pkcs11

  • pkcs11 API 使扩展程序能够枚举 PKCS #11 安全模块,并将其作为密钥和证书的来源供浏览器访问
  • 适用于 Firefox
  • Firefox 警告信息:“提供加密身份验证服务”

根据维基百科: 大多数商业证书颁发机构(CA)软件使用 PKCS #11 访问 CA 签名密钥或注册用户证书。需要使用智能卡的跨平台软件使用 PKCS #11,例如 Mozilla Firefox 和 OpenSSL(使用扩展程序)。

platformKeys

  • 授予扩展程序访问 chrome.platformKeys API 的权限
  • 适用于 Chromium 浏览器

power

  • 授予扩展程序访问 chrome.power API 的权限
  • 适用于 Chromium 浏览器

printerProvider

  • 授予扩展程序访问 chrome.printerProvider API 的权限
  • 适用于 Chromium 浏览器

printing

  • 授予扩展程序访问 chrome.printing API 的权限
  • 适用于 Chromium 浏览器

printingMetrics

  • 授予扩展程序访问 chrome.printingMetrics API 的权限
  • 适用于 Chromium 浏览器

privacy

  • 授予扩展程序访问 chrome.privacy API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“更改与隐私相关的设置”
  • Firefox 警告信息:“读取和修改隐私设置”

processes

  • 授予扩展程序访问 chrome.processes API 的权限
  • 适用于 Chromium 浏览器

proxy

  • 授予扩展程序访问 chrome.proxy API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“读取和更改您在访问的网站上的所有数据”
  • Firefox 警告信息:“控制浏览器代理设置”

scripting

  • 授予扩展程序访问 chrome.scripting API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • 授予扩展程序访问 chrome.search API 的权限
  • 适用于 Chromium 浏览器和 Firefox

sessions

  • 授予扩展程序访问 chrome.sessions API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Firefox 警告信息:“访问最近关闭的标签页”

signedInDevices

  • 授予扩展程序访问 chrome.signedInDevices API 的权限
  • 适用于 Chromium 浏览器

storage

  • 授予扩展程序访问 chrome.storage API 的权限
  • 适用于 Chromium 浏览器和 Firefox

system.cpu

  • 授予扩展程序访问 chrome.system.cpu API 的权限
  • 适用于 Chromium 浏览器

system.display

  • 授予扩展程序访问 chrome.system.display API 的权限
  • 适用于 Chromium 浏览器

system.memory

  • 授予扩展程序访问 chrome.system.memory API 的权限
  • 适用于 Chromium 浏览器

system.storage

  • 授予扩展程序访问 chrome.system.storage API 的权限
  • 适用于 Chromium 浏览器
  • Chrome 警告信息:“识别和弹出存储设备”

tabCapture

  • 授予扩展程序访问 chrome.tabCapture API 的权限
  • 适用于 Chromium 浏览器
  • Chrome 警告信息:“读取和更改您在访问的网站上的所有数据”

tabGroups

  • 授予扩展程序访问 chrome.tabGroups API 的权限
  • 适用于 Chromium 浏览器

tabHide

  • 允许扩展程序使用 tabs.hide() API
  • 适用于 Firefox

tabs

  • 授予扩展程序访问由多个 API(包括 chrome.tabschrome.windows)使用的 Tab 对象的特权字段的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“读取您的浏览历史记录”
  • Firefox 警告信息:“访问浏览器标签页”

注意:在许多情况下,扩展程序无需声明 tabs 权限即可使用这些 API。

theme

  • 启用浏览器扩展程序更新浏览器主题
  • 适用于 Firefox

topSites

  • 授予扩展程序访问 chrome.topSites API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“读取您最常访问的网站列表”
  • Firefox 警告信息:“访问浏览历史记录”

tts

ttsEngine

  • 授予扩展程序访问 chrome.ttsEngine API 的权限
  • 适用于 Chromium 浏览器
  • Chrome 警告信息:“读取使用合成语音朗读的所有文本”

unlimitedStorage

  • 为存储客户端数据(如数据库和本地存储文件)提供无限配额。没有此权限,扩展程序的本地存储限制为 5 MB
  • 适用于 Chromium 浏览器和 Firefox
  • Firefox 警告信息:“存储无限量的客户端数据”

注意:此权限仅适用于 Web sQL 数据库和应用程序缓存。此外,它目前不适用于通配符子域,如 http://*.example.com

vpnProvider

  • 授予扩展程序访问 chrome.vpnProvider API 的权限
  • 适用于 Chromium 浏览器

wallpaper

  • 授予扩展程序访问 chrome.wallpaper API 的权限
  • 适用于 Chromium 浏览器

webNavigation

  • 授予扩展程序访问 chrome.webNavigation API 的权限
  • 适用于 Chromium 浏览器和 Firefox
  • Chrome 警告信息:“读取您的浏览历史记录”
  • Firefox 警告信息:“在导航期间访问浏览器活动”

webRequest

  • 授予扩展程序访问 chrome.webRequest API 的权限
  • 适用于 Chromium 浏览器和 Firefox

webRequestBlocking

  • 如果扩展程序以阻塞方式使用 chrome.webRequest API,则需要此权限
  • 适用于 Chromium 浏览器和 Firefox

总结

在本章中,您了解了权限是什么、它们的作用以及如何声明它们。本章还涵盖了必需权限、可选权限和主机权限之间的区别。它还解释了选择和更改权限的所有复杂含义。

在下一章中,我们将涵盖扩展程序可以使用和修改浏览器网络功能的各个方面,以及它如何创造性地使用内容脚本作为经过身份验证的用户的代理。本章还涵盖了 webRequestdeclarativeNetRequest 之间的重要区别。