使用getUserMedia让用户选择麦克风。此外,我使用enumerateDevices创建带有设备的选择,以便用户可以从UI更改设备。
我在Firefox上,还没有检查其他浏览器的运行情况,但是至少对于FF,我没有找到解决方案。
如果用户在询问时选择不允许访问,则不要再询问[1],直到用户取消限制:
问题是是否有一种方法可以检测用户何时删除限制?
场景通常是:
用户拒绝
UI disables device selector + hide various stuff
用户取消了限制(如上图所示)
UI enables device selector + unhide various stuff
(显然)没有通过Java Script从客户端重置块的方法,但是有没有一种方法可以检测到用户撤销了该块? (或者在那儿?听起来好像可以被用来不断循环访问请求的东西。)
一个人可以做一个循环,在这个循环中,我们会不断尝试页面的生命周期,但要避免这种情况。正在为此寻找活动。
就这一点而言,ondevicechange不会在删除块时触发事件-这在某种程度上是合乎逻辑的,因为可用设备中的设备没有变化,例如:P。
[[1]即:一个人可以问,但结果是:
MediaStreamError消息:在当前上下文中,用户代理或平台不允许该请求。名称:NotAllowedError
您应该能够从Permissions API中检测到此更改。
PermissionStatus返回的Permissions.prototype.query()
对象具有Permissions.prototype.query()
事件处理程序。因此,当用户更改其设置时,对onchange
或"camera"
的查询将触发其更改事件。
"microphone"
当前为const camera_perm = await navigator.permissions.query( { name: 'camera' } );
camera_perm.onchange = (evt) => {
const allowed = camera_perm.state === "granted";
if( allowed ) {
// ...
}
else {
}
};
,但Firefox仍不支持PermissionDescriptor的works in Chrome或"camera"
成员。因此,对于该浏览器,最接近的是通过轮询,如本问答中所述:"microphone"
。