如何判断是不是支持具有特定权限的 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的主要内容,如果未能解决你的问题,请参考以下文章