Javascript 如何检查FireFox中的用户是否拒绝了访问麦克风的权限

Javascript 如何检查FireFox中的用户是否拒绝了访问麦克风的权限,javascript,html,firefox,getusermedia,mediadevices,Javascript,Html,Firefox,Getusermedia,Mediadevices,是否有办法确定用户是否拒绝或允许访问媒体设备(例如: Firefox?中的麦克风、摄像头)?。在Chrome中,我可以用navigator.permissions.query检查这一点,但在Firefox中失败,出现“TypeError” 由于某种原因,我无法用try-catch块捕获上述错误。所以我想知道为什么我不能在try-catch块中捕获这个错误,以及是否有其他方法 用例 我的应用程序具有语音识别功能。我需要在用户遇到寻求访问麦克风的实际“系统对话框”之前显示“预许可弹出窗口”。这个“预

是否有办法确定用户是否拒绝或允许访问媒体设备(例如: Firefox?中的麦克风、摄像头)?。在Chrome中,我可以用navigator.permissions.query检查这一点,但在Firefox中失败,出现“TypeError”

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

用例

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

这是不可能的

这是一项目前正在开发的实验技术:

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


您好,这可能是安全问题吗?getUserMedia仅适用于安全上下文。除非您在本地主机中,否则它将无法在http中工作。当window.onload@louiekim在https上看到这个问题时,也尝试运行本文中的代码。在firefox和edge中,navigator.permissions.query似乎有一些限制。不过,对于您的情况,可能会有一些破解方法,例如
(wait navigator.mediaDevices.enumerateDevices()).filter({kind})=>“audioinput”)[0]。label!==“
可以告诉我们设备的权限是否已“授予”,尽管从我的测试来看,它似乎不太可靠。。。还要注意的是,根据用户的设置,UA可能总是请求权限,因此解释您的用例可能会对这个问题有所帮助。@Kaido我包括了这个用例。是否总是显示消息?或者,如果您真的认为它太麻烦,请将cookie/pref存储在localStorage中,以便每个用户只显示一次。是的,我知道使用权限API是不可能的。所以,我试图找出如何使用try-catch块捕获此错误,或者是否有其他方法。要捕获异常,只需追加
.catch(()=>console.log('not supported')。使用“try/catch
时,如果异常不是异步函数,则无法捕获异常。使用
.catch
:使用
try/catch
处理异常的异步函数:此外,请查看此答案以了解其他方法。这在铬中是很有可能的
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"