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

Red*_*ane 5 javascript firefox navigator

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

我已经尝试了代码:

navigator.permissions.query({name:'camera'}).then(function(result) {
 console.log(result);
});
Run Code Online (Sandbox Code Playgroud)

它在Google Chrome 70上运行良好,但在Firefox上却给我一个错误:

TypeError:PermissionDescriptor'camera'的'name'成员不是枚举PermissionName的有效值。

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

有人可以帮我吗?

谢谢,

Vin*_*rga 7

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.
Run Code Online (Sandbox Code Playgroud)

关于Github在mozilla/standards-positionsPermissions API上的位置,有一个公开讨论。老实说,正如我所看到的,他们尚未得出任何结论。

您可以做的是创建一个基本功能,该功能可在所有没有权限信息的浏览器上使用,并且在Chrome上,您可以通过使用Permissions.query 来确定摄像头和麦克风的权限来逐步增强用户体验。

或者,您可以提出一些逻辑来使用来处理此问题MediaDevices.getUserMedia:例如,您可以调用getUserMedia并立即停止跟踪,如果您唯一需要做的就是确保您的应用具有麦克风和摄像头的权限。但是要小心,这有多个问题:

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

  • 2023 年 3 月,Firefox 111 的 PermissionName 中仍然没有“麦克风”。 (6认同)