权限提醒
您的扩展必须在 manifest 文件中声明它需要的权限才能使用相应的 chrome.* 接口和扩展的接口。有关权限的声明一般都是在“permissions”项中。其中有一些权限在用户安装您的扩展的时候,会显示权限提醒。
当您升级您的扩展时,如果新的版本需要的权限比升级前的版本多(譬如新版本使用了新的接口或需要访问一些新的网站),用户也会看到权限提醒。
权限提醒示例
下图显示的是一个典型的权限提醒对话框:
上面的提醒是因为扩展的Manifest文件中有如下声明:
"permissions": [ "http://api.flickr.com/" ],
注意:在载入正在开发的扩展程序的时候,不会看到权限提醒。只有在通过 .crx
文件安装扩展的时候,您才会看到权限提醒。
如果您在升级扩展的时候,在Manifest文件中增加了新的权限声明,用户可能会看到一个新的权限提醒对话框。例如,假设您在上一个例子的基础上增加一个新的网站访问权限和“tab”权限:
"permissions": [ "http://api.flickr.com/", "http://*.flickr.com/", "tabs" ],
当扩展自动升级的时候,新增的权限声明会使扩展失效,知道用户看到权限提醒并确认重新启用这款扩展。下图展示的是用户可能看见的提醒的样子:
用户点击 Re-enable 按钮重新启用扩展会看到如下的权限提醒对话框:
权限提醒的触发
增加了“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 |
下列权限中的任意一个或多个:
|
如果您的扩展中使用了 如果您的扩展中使用了 |
Access your tabs and browsing activity |
下列权限中的任意一个或多个:
|
如果您的扩展中使用了 如果您的扩展中使用了 |
Manipulate settings that specify whether websites can use features such as cookies, JavaScript, and plug-ins | “contentSettings” 权限 |
如果您的扩展中使用了 |
Access your data on all websites |
下列权限中的任意一个或多个:
|
如果您的扩展中使用了实验性接口中的debugger 模块,则必须声明“debugger”权限。 如果您的扩展中使用了 下列表达式均可以匹配所有host:
activeTab 权限来避免声明需要访问所有的host。
|
Access your data on {list of websites} | 在 “permissions" 项中指明了一个或多个host,但不是所有host |
至多三个网站会被列出来,子域名不会特殊处理。例如: 在扩展自动升级时,如果声明的网站有变化或增加,用户会看到权限提醒。例如:从 |
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() 去执行下面的编辑命令:
|
Manipulate privacy-related settings | “privacy” 权限 |
如果您的扩展使用了 chrome.privacy 模块,则必须声明“privacy”权限。
|
Access all text spoken using synthesized speech | “ttsEngine” 权限 |
如果您的扩展使用了 chrome.ttsEngine 模块,则必须声明“ttsEngine”权限。
|
不会触发提醒的权限
下列权限声明不会触发任何权限提醒:
- "activeTab"
- "browsingData"
- "chrome://favicon/"
- "clipboardWrite"
- "contextMenus"
- "cookies"
- "experimental"
- "idle"
- "notifications"
- "storage"
- "unlimitedStorage"
- "webRequest"
- "webRequestBlocking"
权限提醒测试
如果您想测试您的扩展在安装时会显示怎样的权限提醒,请先将您的扩展 打包 为一个 .crx
文件,然后安装它。
如果想测试您的扩展在自动升级的时候会显示怎么的权限提醒,您需要先部署好一个自动升级服务器。首先,创建一个升级manifest文件并将您的扩展的“update_url”项指向它(参见 自动升级)。然后将您的扩展
打包 为一个 .crx
文件。使用这个 .crx
文件安装您的扩展。现在将您的扩展的manifest文件中加入新的权限声明,并 重新打包 您的扩展。最后,通过在
chrome://extensions 页面点击升级扩展按钮来升级您的扩展。
API
您可以通过调用 management.getPermissionWarningsByManifest 获得指定的manifest清单文件中所包含的所有权限警告。