我正在研究 SAAS 解决方案,我需要客户从应用程序接收通知声音。即使他们只是在没有与它任何交互的情况下启动它。谷歌在这方面改变了 Chrome 的行为,现在用户需要点击网页才能获得通知声音。我发现可以在这里明确允许声音:
然后用户应该为您的网站明确启用声音:
现在用户无需单击即可启用声音通知。我的问题:是否可以像我们对麦克风一样请求用户对声音的许可:
有没有办法查明用户是否拒绝或允许访问 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"
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我无法使用 try catch 块捕获上述错误。所以我想知道为什么我无法在 try catch 块中捕获此错误以及是否有替代方法。
用例
我的应用程序具有语音识别功能。在用户遇到寻求访问麦克风的实际“系统对话框”之前,我需要显示“预先权限弹出”。这种“预许可弹出”背后的想法是向用户提供应用程序需要访问权限的上下文。如果用户已经授予/拒绝访问权限,则不需要预先许可弹出窗口。所以我需要检查麦克风的权限状态并在需要时显示弹出窗口。