This page was saved using WebZIP 7.0.3.1030 offline browser on 12/24/13 11:31:36.
Address: https://crxdoc-zh.appspot.com/extensions/permission_warnings.html
Title: 权限警告 - Google Chrome 扩展程序开发文档(非官方中文版)  •  Size: 33111

权限警告

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

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

权限警告的例子

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

Permission warning: 'It can: Access 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: Access your data on api.flickr.com and flickr.com; Read and modify your browsing history'

警告以及导致它们的原因

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

注意:从 Google Chrome 7 开始,您不再需要指定 "tabs" 权限,就能直接调用 chrome.tabs.create()chrome.tabs.update()

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

警告消息 导致这一警告的清单文件条目 备注
访问您计算机上的所有数据以及您在所有网站上的数据 "plugins" NPAPI 插件要求 "plugins" 权限。
读取和修改您的书签 "bookmarks" 权限 chrome.bookmarks 模块要求 "bookmarks" 权限。
读取和修改您的浏览记录 以下任意一个:
  • "history" 权限
  • "topSites" 权限

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

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

访问您的标签页和浏览活动 以下任意一个:
  • "tabs" 权限
  • "webNavigation" 权限

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

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

管理用于控制网站对 Cookie、JavaScript 和插件的访问权限的设置 "contentSettings" 权限

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

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

debugger 模块要求 "debugger" 权限。

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

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

  • http://*/*
  • https://*/*
  • *://*/*
  • <all_urls>
注意您可以使用 activeTab 权限避免声明所有主机权限。
访问页面调试程序后端 "debugger" 权限

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

访问您在 {网站列表} 上的数据 在 "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"
管理隐私相关设置 "privacy" 权限 chrome.privacy 模块要求 "privacy" 权限。
访问您登录的设备列表 "signedInDevices" 权限 chrome.signedInDevices 模块要求 "signedInDevices" 权限。
访问使用合成语音说出的所有文字 "ttsEngine" 权限 chrome.ttsEngine 模块要求 "ttsEngine" 权限。

不导致警告的权限

如下权限不会导致警告:

测试权限警告

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

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

API

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