权限提醒

您的扩展必须在 manifest 文件中声明它需要的权限才能使用相应的 chrome.* 接口和扩展的接口。有关权限的声明一般都是在“permissions”项中。其中有一些权限在用户安装您的扩展的时候,会显示权限提醒。

当您升级您的扩展时,如果新的版本需要的权限比升级前的版本多(譬如新版本使用了新的接口或需要访问一些新的网站),用户也会看到权限提醒。

权限提醒示例

下图显示的是一个典型的权限提醒对话框:

权限提醒:'It can: Access your data on api.flickr.com'

上面的提醒是因为扩展的Manifest文件中有如下声明:

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

注意:在载入正在开发的扩展程序的时候,不会看到权限提醒。只有在通过 .crx 文件安装扩展的时候,您才会看到权限提醒。

如果您在升级扩展的时候,在Manifest文件中增加了新的权限声明,用户可能会看到一个新的权限提醒对话框。例如,假设您在上一个例子的基础上增加一个新的网站访问权限和“tab”权限:

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

当扩展自动升级的时候,新增的权限声明会使扩展失效,知道用户看到权限提醒并确认重新启用这款扩展。下图展示的是用户可能看见的提醒的样子:

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

用户点击 Re-enable 按钮重新启用扩展会看到如下的权限提醒对话框:

权限提醒:'It can: Access your data on api.flickr.com and flickr.com; Read and modify your browsing history'

权限提醒的触发

增加了“tabs”权限声明引发的提醒却显示“扩展需要访问您的浏览历史”,看上去好像完全不相及。会显示这样的提醒是因为尽管您可能只是使用 chrome.tabs 接口来打开新的标签页,这个接口(tabs.Tab 对象)也可以被用来查看所有的标签页的URL。

注意:从Chrome 7开始,如果只是需要调用 chrome.tabs.create()chrome.tabs.update() 方法的话,您不再需要在Manifest文件中指定“tabs”权限了。

下表列出了各个用户可能会看到的权限提醒文字以及会触发它的Manifest中的条目。

权限提醒文字 会触发它的Manifest中的条目 备注
Access all data on your computer and the websites you visit “plugins” 如果您的扩展使用了NPAPI插件,则必须在Manifest中声明“plugins”权限。
Read and modify your browsing history 下列权限中的任意一个或多个:
  • “history” 权限
  • “topSites” 权限

如果您的扩展中使用了 chrome.history,则必须声明“history”权限。

如果您的扩展中使用了 chrome.topSites,则必须声明“topSites”权限。

Access your tabs and browsing activity 下列权限中的任意一个或多个:
  • “tabs” 权限
  • “webNavigation” 权限

如果您的扩展中使用了 chrome.tabschrome.windows 模块,则必须声明“tabs”权限。

如果您的扩展中使用了 chrome.webNavigation 模块,则必须声明“webNavigation”权限。

Manipulate settings that specify whether websites can use features such as cookies, JavaScript, and plug-ins “contentSettings” 权限

如果您的扩展中使用了 chrome.contentSettings,则必须声明“contentSettings”权限。

Access your data on all websites 下列权限中的任意一个或多个:
  • “debugger” 权限
  • “pageCapture” 权限
  • “proxy” 权限
  • 在 “permissions” 项中声明了一个可匹配所有host的表达式
  • 在 “content_scripts” 项中的 “matches” 中存在可以匹配所有host的条目
  • “devtools_page”

如果您的扩展中使用了实验性接口中的debugger 模块,则必须声明“debugger”权限。

如果您的扩展中使用了 chrome.proxy 模块,则必须声明“proxy”权限。

下列表达式均可以匹配所有host:

  • http://*/*
  • https://*/*
  • *://*/*
  • <all_urls>
注意:某些情况下,您可以通过使用activeTab 权限来避免声明需要访问所有的host。
Access your data on {list of websites} 在 “permissions" 项中指明了一个或多个host,但不是所有host

至多三个网站会被列出来,子域名不会特殊处理。例如:a.comb.a.com 会被列为两个不同的网站。

在扩展自动升级时,如果声明的网站有变化或增加,用户会看到权限提醒。例如:从 a.com,b.com 变为 a.com,b.com,c.com 会触发权限提醒;从 b.a.com 变为 a.com 或从 a.com 变为 b.a.com 同样也会触发提醒。

Manage your apps, extensions, and themes “management” 权限 如果您的扩展使用了 chrome.management 模块,则必须声明“management”权限。
Detect your physical location “geolocation” 权限 使用了HTML5中 geolocation接口 的扩展如果在Manifest中声明了此项权限,则在运行时,不会再次收到浏览器的弹条提醒。
Access data you copy and paste “clipboardRead” 权限 声明了此项权限的扩展可以使用 document.execCommand() 去执行下面的编辑命令:
  • "copy"
  • "cut"
Manipulate privacy-related settings “privacy” 权限 如果您的扩展使用了 chrome.privacy 模块,则必须声明“privacy”权限。
Access all text spoken using synthesized speech “ttsEngine” 权限 如果您的扩展使用了 chrome.ttsEngine 模块,则必须声明“ttsEngine”权限。

不会触发提醒的权限

下列权限声明不会触发任何权限提醒:

权限提醒测试

如果您想测试您的扩展在安装时会显示怎样的权限提醒,请先将您的扩展 打包 为一个 .crx 文件,然后安装它。

如果想测试您的扩展在自动升级的时候会显示怎么的权限提醒,您需要先部署好一个自动升级服务器。首先,创建一个升级manifest文件并将您的扩展的“update_url”项指向它(参见 自动升级)。然后将您的扩展 打包 为一个 .crx 文件。使用这个 .crx 文件安装您的扩展。现在将您的扩展的manifest文件中加入新的权限声明,并 重新打包 您的扩展。最后,通过在 chrome://extensions 页面点击升级扩展按钮来升级您的扩展。

API

您可以通过调用 management.getPermissionWarningsByManifest 获得指定的manifest清单文件中所包含的所有权限警告。