【问题标题】:How to tell if navigator.permissions.query with a certain permission is supported如何判断是否支持具有特定权限的 navigator.permissions.query
【发布时间】:2021-05-17 21:05:09
【问题描述】:

我有以下代码:

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);
}

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

【问题讨论】:

  • 你可以使用try/catch
  • @Barmar 我试过了,我错过了什么吗?

标签: javascript firefox permissions cross-browser navigator


【解决方案1】:

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

navigator.permissions 返回一个 Promise,因此除了 .then() 之外,您还可以在 Promise 被拒绝时使用 .catch()

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);
  });

【讨论】:

    猜你喜欢
    • 2017-02-03
    • 2023-03-10
    • 1970-01-01
    • 2012-04-19
    • 2015-06-23
    • 2016-12-05
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多