如何判断是否支持具有特定权限的navigator.permissions.query

我有以下代码:

if (navigator.permissions && navigator.permissions.query) {
  navigator.permissions.query({
    name: 'clipboard-write'
  }).then(function(result) {
    if (result.state === 'granted') {
      //Do something!
    } else{
      //Not granted...
    }
} else {
  //Does not support navigator.permissions
}

这适用于 Safari 和 Chrome。但是,在 Firefox 中,它会引发此错误:

TypeError: 'name' member of PermissionDescriptor 'clipboard-write' is not a valid value for enumeration PermissionName.

navigator.permissions.query支持,只是没有clipboard-write。那么,如何查看浏览器是否支持:

navigator.permissions.query({name:'clipboard-write'})

我以为我可以只检查正在使用的浏览器,但我认为必须有更好的方法来做到这一点。

编辑(尝试/捕捉)

我尝试try/catch使用以下代码:

try {
  navigator.permissions.query({
    name:'clipboard-write'
  });
}
catch(error) {
  console.log(error);
}

不幸的是,这catch在 Firefox中没有。

回答

聚会有点晚了,但看到你没有得到任何答案,以防有人偶然发现这个问题:

navigator.permissions返回一个 Promise,所以除了.then()你可以.catch()在 Promise 被拒绝时使用。

clipboard-write现在似乎在 Firefox 中可用,所以我camera在这个例子中使用了它,它在 Firefox 中仍然会失败(为了测试这个,任何无意义的值也可以)。

navigator.permissions.query({
    name: 'camera'
  })
  .then((permissionObj) => {
    console.log(permissionObj);
    // ... check the permission object ...
  })
  .catch((error) => {
    // couldn't query the permission
    console.error(error);
  });


以上是如何判断是否支持具有特定权限的navigator.permissions.query的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>