You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// Check for Geolocation API permissions
navigator.permissions.query({name:'geolocation'}).then(function(permissionStatus)
{
console.log('geolocation permission status is ', permissionStatus.status);
permissionStatus.onchange = function() {
console.log('geolocation permission status has changed to ', this.status);
};
});
如果你以前使用过Geolocation API,那么你很可能希望可以检查自己是否有权限来使用Geolocation API并且不展示确认框。这个简单的愿望目前是不可能的。你必须要先请求获取目前的位置,然后或许能拿到位置,这表示你有权限。也有可能弹出一个确认框给用户确认是否给权限。
并不是所有的API都是这样工作的。Notification API提供了Notification.permission来让你可以检查自己是否有权限。
Web平台的API一直在发展,现在有必要提供一个标准的方法来让开发者统一检查权限。而不是记住每种API的使用方法。Chrome 43版本提供了Permision API,这个APi提供了统一的方法来检查权限状态。
permissions.query()
permissions.query()
方法可以用来检查是否有权限。它会返回三种状态:granted(有权限)、denied(没有权限)或者prompt(需要用户确认)。例如:query方法的输入是一个PermissionDescripter对象,你可以在这个对象上定义权限的名字。方法的返回结果是一个Promise对象,用于异步获取PermissionStatus对象。你可以检查这个对象的status值来检查权限。你也可以监听
permissionStatus.onchange
事件,来处理权限状态改变的情况。支持的PermissionDescriptors
在上面的样例中,我们知道了如何检查Geolocation API的权限,所用的权限描述对象为:
{name:'geolocation'}
。Notification API的权限描述对象也是类似的,只需要一个name属性:
{name:'notifications'}
。Push和midi API则有一个各自特有的额外参数。
对于Push API的权限检查,你可以提供一个userVisible参数。这个参数表明了你是否想让每条信息都显示一个通知,如果不显示通知则便是静默处理每条push信息(目前Chrome仅仅支持有通知的push信息)。你可以这样使用:
Midi API有一个sysex参数。这个参数表明了你是否需要系统排除信息。Midi的权限检查方法如下:
请求获取权限
对用户来说,请求获取指定API权限的方法都各不相同。例如,Geolocation API会在你调用
getCurrentPosition()
时弹出一个确认框给用户。在调用
Notification.requestPermission()
方法时也会弹出一个确认框给用户,代码如下:这里想强调的是:Permission API允许你使用一个统一的方法来检测一系列Web API的权限。这带来的巨大优势就是:允许你只给那些没有确认过权限的用户弹出确认框。这将大大提高用户的体验。你可以在你有权限时充分利用这些API打造更棒的体验。
这里有一系列使用样例。
浏览器支持
Chrome是以第一个实现这个API的浏览器,Mozilla正在计划提供这个功能,并且Microsoft也对这个API感兴趣。
已知的问题
Geolocation API在用户忽略权限确认框后,再次请求不会显示确认框。并且这是Permission状态值为
prompt
。这显然是不合理的。[crbug.com/476509]The text was updated successfully, but these errors were encountered: