Firefox 权限:'name' PermissionDescriptor 'camera' 的成员不是枚举 PermissionName 的有效值



我正在制作一个web应用程序,需要使用权限查询来检查是否授予了用户相机访问权限。

我试过代码:

navigator.permissions.query({name:'camera'}).then(function(result) {
console.log(result);
});

它在谷歌Chrome 70上运行良好,但在firefox:上给了我一个错误

类型错误:PermissionDescriptor"camera"的"name"成员不是枚举PermissionName的有效值

我一直在寻找这个问题,但没有任何帮助。

有人能帮我吗?

谢谢,

Permissions API被标记为实验技术。

问题是Firefox确实有navigator.permissions,并且也支持其上的query方法,但是,它并不支持MDN的Permissions API页面上列出的所有权限名称。

你可以自己尝试:在Firefox上转到控制台并执行

// geolocation is working fine
navigator.permissions.query({ name: 'geolocation' }).then(console.log)
// camera, microphone is not supported, throws
navigator.permissions.query({ name: 'camera' })
// TypeError: 'name' member of PermissionDescriptor 'camera' is not a valid value for enumeration PermissionName.
navigator.permissions.query({ name: 'microphone' })
// TypeError: 'name' member of PermissionDescriptor 'microphone' is not a valid value for enumeration PermissionName.

mozilla/standards-positions中有一个关于Github的公开讨论,讨论他们对权限API的立场。老实说,正如我所见,他们还没有得出任何结论。

你可以做的是创建一个基本功能,在没有权限信息的情况下在所有浏览器上都可以使用,在Chrome上,你可以通过使用Permissions.query来计算相机和麦克风的权限来逐步增强用户体验。

或者,你可以使用MediaDevices.getUserMedia想出一些逻辑来处理这个问题:例如,如果你唯一想做的就是确保你的应用程序拥有麦克风和相机的权限,你可以调用getUserMedia并立即停止曲目。不过要小心,这有多个问题:

  1. 相机灯将打开一秒钟
  2. 如果您的用户拒绝权限,您将很难再次请求,因此在请求权限之前,您应该向用户说明为什么需要这些权限

最新更新