likes
comments
collection
share

不常用的浏览器 API —— Permissions

作者站长头像
站长
· 阅读数 19

这一节来看 Permissions API,这是一个非常重要的 API,虽然普通 Web 开发不常用,但是在特定的场景下是非常有用的,前面章节中也有涉及到过一些,这一篇来重点看一下。

Permissions API 是用来获取权限的,如果做过移动客户端开发的一定不陌生,获取权限是非常重要的一步,用户需要有能力控制程序的访问权限,因此当我们的程序需要调起操作系统的某项能力是,我们需要先向用户获取授权。而 Web 的环境隔离性更强,因此对权限的要求更高,对于特定的资源访问,我们需要通过浏览器来请求用户授权,这时就需要用到这一组 API。

我们需要通过 navigator.permissions 来访问相关的 API,上面最重要的是 query 方法,调用 query 方法传入 name 就可以获取对应类型的权限,这里 name 可以在权限列表中查询,但是不是所有的浏览器都可以支持的,这里需要注意一下。另外也不是所有的浏览器权限都通过 navigator.permissions 来获取,比如媒体权限可以在调用 getUserMedia 时获取。获取权限后会在用户侧弹出一个请求提示,用户点击授权后对应的 promise 会 resolve 一个 PermissionStatus 对象。PermissionStatus 中可以看到权限的授予情况,它包含 granted、denied、prompt 三个取值,举一个 geolocation权限的例子:

navigator.permissions.query({name:'geolocation'}).then(function(result) {
 if (result.state == 'granted') {
   showLocalNewsWithGeolocation();
 } else if (result.state == 'prompt') {
   showButtonToEnableLocalNews();
 }
 // Don't do anything if the permission was denied.
});

除了上面这些,navigator.permissions 上面还有一些其他方法,不过这部分的兼容性好像不是很好,能使用的地方不多,这里不做介绍了。

转载自:https://juejin.cn/post/7087452167870611492
评论
请登录