如果您使用过 Geolocation API 您可能需要检查自己是否有权使用 进行地理定位时不发出提示。这根本不可能。您必须请求当前位置,这将指示权限状态或导致向用户显示提示。
并非所有 API 都是如此。Notifications API 有一种自己的方式 你可以通过以下方式查看当前权限状态: Notification.permission。
随着网络平台在 API 方面的发展,需要为 API 使用单一的标准方法 因此您不必费心记住权限, 每个 API 的工作原理Chrome 版本 43 中提供的 Permission API 为 旨在成为一种检查 API 权限状态的标准方式。
permissions.query()
使用 permissions.query()
方法检查权限的状态。这将
返回状态:“同意”(您有权限)、“已拒绝”(您被禁止访问
访问 API)或
提示(用户需要
)。例如:
// Check for Geolocation API permissions
navigator.permissions.query({name:'geolocation'})
.then(function(permissionStatus) {
console.log('geolocation permission state is ', permissionStatus.state);
permissionStatus.onchange = function() {
console.log('geolocation permission state has changed to ', this.state);
};
});
query 方法采用
PermissionDescriptor
对象,您可以在此对象中定义权限的名称。响应是一个 Promise
解析为
PermissionStatus
对象。在此对象中,您可以使用 permissionStatus.state
检查状态
“granted”“denied”或“提示”你还可以实现
permissionStatus.onchange
的处理程序,并处理权限更改
状态。
支持的 PermissionDescriptor
在上面的示例中,我们重点介绍了如何查询
地理定位,具有以下权限描述符:{name:'geolocation'}
。
通知权限描述符与之类似,因为它只需要
name 属性:{name:'notifications'}
。
对于推送权限,您可以提供 userVisibleOnly
参数。
指明您是否希望为每条推送消息显示通知
或能够发送无声推送通知(目前
支持带有通知的推送通知)。您可以这样使用:
navigator.permissions.query({name:'push', userVisibleOnly:true})
Midi 允许使用 sysex
参数。指明您是否需要和/或接收
系统专有消息。对于 midi,代码为:
navigator.permissions.query({name:'midi', sysex:true})
请求权限
向用户请求权限取决于具体的 API。例如:
当您调用 getCurrentPosition()
时,地理定位功能会显示权限提示。
navigator.geolocation.getCurrentPosition(function(position) {
console.log('Geolocation permissions granted');
console.log('Latitude:' + position.coords.latitude);
console.log('Longitude:' + position.coords.longitude);
});
而当您调用 requestPermission()
时,通知会提示用户。
Notification.requestPermission(function(result) {
if (result === 'denied') {
console.log('Permission wasn\'t granted. Allow a retry.');
return;
} else if (result === 'default') {
console.log('The permission request was dismissed.');
return;
}
console.log('Permission was granted for notifications');
});
重点在于,Permission API 让您能以一致的方式来监控 同时能够支持当前已启用的 API 范围, 。
这样做的一大优势在于 只有在对用户显而易见您为什么需要额外操作时才提示用户 并充分利用这些 API 已授予权限。
浏览器支持
Chrome 是首个实施此功能的浏览器,而 Mozilla 正计划 而 Microsoft 也已表现出对 API 的兴趣。
已知问题
- 如果用户关闭该权限,地理定位将不会重新显示提示 请求。不过,权限状态仍为“提示”。 [bugs.chromium.org]