权限警告

要使用大部分 chrome.* API 和应用功能,您的应用必须在清单文件中声明它的意图,通常在 "permission" 字段中。其中一些声明会使用户在安装您的应用时看到一个警告对话框。

当您自动更新您的应用时,如果应用请求新的权限,用户可能会看到另一个警告对话框。这些新的权限可能是因为您的应用使用了新的 API,也可能是因为您的应用需要访问新的网站。

权限警告的例子

如下是用户在安装应用时可能会看到的典型对话框:

Permission warning: 'It can: Read and modify your data on api.flickr.com'

有关访问来自 api.flickr.com 的数据的警告是因为应用清单文件中的如下几行:

"permissions": [
  "http://api.flickr.com/"
],

注意: 当您加载未打包的应用时不会看到权限警告,只有当您从 .crx 文件安装应用时才会看到权限警告。

如果您在自动更新时向应用添加新的权限,用户可能看到新的权限警告。例如,假设您在前一个例子中添加了一个新的站点以及 "tabs" 权限:

"permissions": [
  "http://api.flickr.com/",
  "http://*.flickr.com/",
  "tabs"
],

当应用自动更新时,增加的权限将使应用被禁用,直到用户重新启用。如下是用户看到的警告:

Warning text: 'The newest version of the extension Hello World requires more permissions, so it has been disabled. [Re-enable].'

单击重新启用按钮将显示如下警告:

Permission warning: 'It can: Read and modify your data on api.flickr.com; Access your browsing activity'

警告以及导致它们的原因

当您添加某些权限,例如 "tabs" 后,将显示看上去不相关的警告,说应用可以访问您的浏览器活动,这可能令人惊讶。这一警告的原因是尽管 chrome.tabs API 可能只用来打开新标签页,它也能够用来查看每一个新打开的标签页相关联的 URL(使用它们的 tabs.Tab 对象)。

下表列出了用户可能看到的警告消息,以及导致这些警告的清单文件条目。

警告消息 导致这一警告的清单文件条目 备注
访问您的浏览活动 以下任意一个:
  • "tabs" 权限
  • "webNavigation" 权限

chrome.tabs chrome.windows 模块要求 "tabs" 权限。

chrome.webNavigation 模块要求 "webNavigation" 权限。

读取和修改您访问的网站上的所有数据 以下任意一个:
  • "pageCapture" 权限
  • "proxy" 权限
  • 在 "permissions" 字段中匹配所有主机的匹配表达式,
  • "content_scripts" 字段中 "matches" 项匹配所有主机
  • "devtools_page"

chrome.proxy 模块要求 "proxy" 权限。

以下任意一个 URL 匹配所有主机:

  • http://*/*
  • https://*/*
  • *://*/*
  • <all_urls>
注意您可以使用 activeTab 权限避免声明所有主机权限。
读取和修改您在 {网站列表} 上的数据 在 "permissions" 字段的匹配表达式中,指定了一个或多个,但不是所有主机

最多会列出 3 个站点的名称。子域名不会特别对待,例如,a.comb.a.com 将作为不同站点列出。

在自动更新时,如果应用添加或更改了站点,用户将会看到权限警告。例如,从 a.com,b.coma.com,b.com,c.com 会导致一个警告。从 b.a.coma.com 或者反过来也都会导致警告。

管理您的应用、应用和主题背景 "management" 权限 chrome.management 模块要求 "management" 权限。
检测您所在的地理位置 "geolocation" 权限 允许应用使用提议的 HTML5 地理定位 API 而不用提示用户就允许访问。
访问您复制和粘贴的数据 "clipboardRead" 权限 允许应用通过 document.execCommand() 使用以下编辑命令:
  • "copy"
  • "cut"
访问使用合成语音说出的所有文字 "ttsEngine" 权限 chrome.ttsEngine 模块要求 "ttsEngine" 权限。

不导致警告的权限

如下权限不会导致警告:

  • "activeTab"
  • "browsingData"
  • "clipboardWrite"
  • "contextMenus"
  • "cookies"
  • "notifications"
  • "storage"
  • "unlimitedStorage"
  • "webRequest"
  • "webRequestBlocking"

测试权限警告

如果您想看到您的用户会得到怎样的警告,将您的应用打包.crx 文件并安装。

如果您想看到在您的应用自动更新时用户会看到的警告,这要稍微麻烦一些,需要设置自动更新服务器。如果要这么做,首先创建一个更新清单文件,并在您的应用中通过 "update_url" 属性(参见自动更新)指向它。接着,将应用打包成新的 .crx 文件,并从这一 .crx 文件安装。现在,更改应用的清单文件,以包含新的权限,并重新打包应用。最后,单击 chrome://extensions 页面中的立即更新应用按钮,更新应用(以及所有其他有更新的应用)。

API

您可以使用 management.getPermissionWarningsByManifest 获得任意清单文件的权限警告列表。