前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Permissions API

Permissions API

作者头像
mmzhou
发布2018-08-01 18:50:38
8870
发布2018-08-01 18:50:38
举报
文章被收录于专栏:前端小作坊前端小作坊

Permissions API

这篇文章翻译自HTML5ROCKS的Permissions API

如果你以前使用过Geolocation API,那么你很可能希望可以检查自己是否有权限来使用Geolocation API并且不展示确认框。这个简单的愿望目前是不可能的。你必须要先请求获取目前的位置,然后或许能拿到位置,这表示你有权限。也有可能弹出一个确认框给用户确认是否给权限。

并不是所有的API都是这样工作的。Notification API提供了Notification.permission来让你可以检查自己是否有权限。

Web平台的API一直在发展,现在有必要提供一个标准的方法来让开发者统一检查权限。而不是记住每种API的使用方法。Chrome 43版本提供了Permision API,这个APi提供了统一的方法来检查权限状态。

permissions.query()

permissions.query()方法可以用来检查是否有权限。它会返回三种状态:granted(有权限)、denied(没有权限)或者prompt(需要用户确认)。例如:

代码语言:javascript
复制
// 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);
    };
});

query方法的输入是一个PermissionDescripter对象,你可以在这个对象上定义权限的名字。方法的返回结果是一个Promise对象,用于异步获取PermissionStatus对象。你可以检查这个对象的status值来检查权限。你也可以监听permissionStatus.onchange事件,来处理权限状态改变的情况。

支持的PermissionDescriptors

在上面的样例中,我们知道了如何检查Geolocation API的权限,所用的权限描述对象为:{name:'geolocation'}

Notification API的权限描述对象也是类似的,只需要一个name属性:{name:'notifications'}

Pushmidi API则有一个各自特有的额外参数。

对于Push API的权限检查,你可以提供一个userVisible参数。这个参数表明了你是否想让每条信息都显示一个通知,如果不显示通知则便是静默处理每条push信息(目前Chrome仅仅支持有通知的push信息)。你可以这样使用:

代码语言:javascript
复制
navigator.permissions.query({name:'push', userVisible:true})

Midi API有一个sysex参数。这个参数表明了你是否需要系统排除信息。Midi的权限检查方法如下:

代码语言:javascript
复制
navigator.permissions.query({name:'midi', sysex:true})

请求获取权限

对用户来说,请求获取指定API权限的方法都各不相同。例如,Geolocation API会在你调用getCurrentPosition()时弹出一个确认框给用户。

代码语言:javascript
复制
navigator.geolocation.getCurrentPosition(function(position) {
    console.log('Geolocation permissions granted');
    console.log('Latitude:' + position.coords.latitude);
    console.log('Longitude:' + position.coords.longitude);
});

在调用Notification.requestPermission()方法时也会弹出一个确认框给用户,代码如下:

代码语言:javascript
复制
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允许你使用一个统一的方法来检测一系列Web API的权限。这带来的巨大优势就是:允许你只给那些没有确认过权限的用户弹出确认框。这将大大提高用户的体验。你可以在你有权限时充分利用这些API打造更棒的体验。

这里有一系列使用样例

浏览器支持

Chrome是以第一个实现这个API的浏览器,Mozilla正在计划提供这个功能,并且Microsoft也对这个API感兴趣。

已知的问题

Geolocation API在用户忽略权限确认框后,再次请求不会显示确认框。并且这是Permission状态值为prompt。这显然是不合理的。[crbug.com/476509]

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Permissions API
    • permissions.query()
      • 支持的PermissionDescriptors
        • 请求获取权限
          • 浏览器支持
            • 已知的问题
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档