6

有没有办法查明用户是否拒绝或允许 Firefox 中的媒体设备(例如:麦克风、相机)?在 Chrome 中,我可以使用 navigator.permissions.query 进行检查,但在 Firefox 中失败并显示“TypeError”。

navigator.permissions.query({name:"microphone"}).then(function(promise) {
   if ( promise && promise.state ) {
      console.log(promise.state); //"granted", "prompt" or "rejected"
    }
});
//in Firefox, It throws the error "TypeError: 'name' member of PermissionDescriptor '' is not a valid value for enumeration PermissionName"

由于某种原因,我无法使用 try catch 块捕获上述错误。所以我想知道为什么我不能在 try catch 块中捕捉到这个错误,以及是否有替代方法。

用例

我的应用程序具有语音识别功能。在用户遇到寻求访问麦克风的实际“系统对话框”之前,我需要显示“预许可弹出窗口”。这个“预许可弹出”背后的想法是为用户提供应用程序需要访问权限的上下文。如果用户已经授予/拒绝访问权限,则不需要弹出预许可。所以我需要检查麦克风的权限状态并在需要时显示弹出窗口。

4

1 回答 1

4

这是不可能的

Permissions API是目前正在开发的实验性技术:

Mozilla 认为,使用用户权限的能力对于用户代理至关重要。API 的某些方面不适合 Firefox 中使用的权限模型,因此我们希望改进 API 的几个方面。特别是,我们认为权限状态的方式需要更准确地反映存在或可能存在的不同状态。我们还认为需要更好地阐明与 Feature Policy 的交互。我们致力于解决此问题,因为权限对于使网络成为更强大的平台变得至关重要,并且确保我们保留用户对其在线体验的控制权非常重要

Mozilla 关于 Permissions API 的立场

于 2019-12-11T18:59:53.977 回答