该页面翻译自 Google Chrome Extensions 与 Google Chrome Apps。除非特别说明,该页面的内容遵循 Creative Commons Attribution 3.0 License,代码示例遵循 BSD License。
| 描述: |
使用 chrome.permissions API 在运行时而不是安装时请求声明的可选权限,这样用户可以理解为什么需要这些权限,并且仅在必要时授予这些权限。
|
| 可用版本: |
从 Chrome 16 开始稳定支持。
|
| 了解更多: |
声明权限
|
扩展程序既可以声明必选权限,也可以声明可选权限。大体上说:
必选权限的优势:
可选权限的优势:
和 permissions 字段使用相同的格式,使用
optional_permissions 键,在您的扩展程序的清单文件中声明可选权限:
{
"name": "我的扩展程序",
...
"optional_permissions": [ "tabs", "http://www.google.com/" ],
...
}
您可以将下列任意权限指定为可选权限:
如果您希望请求只能在运行时发现的主机,您可以在
optional_permission 中包含 "http://*/" 和/或
"https://*/",这样就允许您在 Permissions.origins
中指定任意来源,只要它具有匹配的协议。
使用
permissions.request()
在用户操作下请求权限:
document.querySelector('#my-button').addEventListener('click', function(event) {
// 权限必须在用户操作下请求,例如按钮单击的事件处理函数。
chrome.permissions.request({
permissions: ['tabs'],
origins: ['http://www.google.com/']
}, function(granted) {
// 如果用户授予了这些权限,则回调函数的参数为 true。
if (granted) {
doSomething();
} else {
doSomethingElse();
}
});
});
如果加入这些权限会导致与用户已经看见并接受的所不同的权限警告,Chrome 浏览器会提示用户。例如,上面的代码可能会导致如下提示:
要检查您的扩展程序是否拥有某个或某些权限,请使用
permission.contains():
chrome.permissions.contains({
permissions: ['tabs'],
origins: ['http://www.google.com/']
}, function(result) {
if (result) {
// 扩展程序拥有这些权限。
} else {
// 扩展程序没有这些权限。
}
});
您应该及时移除您不再需要的权限。在权限移除后,调用
permissions.request()
通常会再次添加权限而不再提示用户。
chrome.permissions.remove({
permissions: ['tabs'],
origins: ['http://www.google.com/']
}, function(removed) {
if (removed) {
// 权限已经移除。
} else {
// 权限没有移除(例如您试着移除必需的权限)
}
});
获得扩展程序当前拥有的所有权限。
callback 参数应该指定一个如下形式的函数:
function(Permissions permissions) {...};
检查扩展程序是否拥有指定权限。
callback 参数应该指定一个如下形式的函数:
function(boolean result) {...};
请求访问指定的权限,这些权限必须已在清单文件中的 optional_permissions 字段中定义。如果请求权限过程中发生任何问题,将会设置 runtime.lastError。
如果您指定了 callback 参数,它应该指定一个如下形式的函数:
function(boolean granted) {...};
移除指定权限的访问。如果移除权限过程中发生任何问题,将会设置 runtime.lastError。
如果您指定了 callback 参数,它应该指定一个如下形式的函数:
function(boolean removed) {...};
扩展程序获得新权限时产生。
callback 参数应该指定一个如下形式的函数:
function(Permissions permissions) {...};
对权限的访问从扩展程序移除时产生。
callback 参数应该指定一个如下形式的函数:
function(Permissions permissions) {...};