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

Posted

技术标签:

【中文标题】如何判断是不是支持具有特定权限的 navigator.permissions.query【英文标题】: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 我试过了,我错过了什么吗? 【参考方案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);
  );

【讨论】:

以上是关于如何判断是不是支持具有特定权限的 navigator.permissions.query的主要内容,如果未能解决你的问题,请参考以下文章

我的 discord.py 机器人有啥方法可以检查用户是不是具有使用命令的特定权限?

如何启动具有特定访问权限的子进程

如何找到只对所有者具有特定权限的文件?

如何在Django中获取具有特定权限组的所有用户的列表

检查其他用户是不是对 linux 上的文件具有读/写权限

如何根据具有特定条件的特定记录的用户权限有效过滤大量记录?