检测设备限制的删除

问题描述 投票:1回答:1

使用getUserMedia让用户选择麦克风。此外,我使用enumerateDevices创建带有设备的选择,以便用户可以从UI更改设备。

我在Firefox上,还没有检查其他浏览器的运行情况,但是至少对于FF,我没有找到解决方案。

如果用户在询问时选择不允许访问,则不要再询问[1],直到用户取消限制:

enter image description here

问题是是否有一种方法可以检测用户何时删除限制?

场景通常是:

  1. 用户加载页面并要求选择输入设备
  2. 用户拒绝

    UI disables device selector + hide various stuff
    
  3. 用户取消了限制(如上图所示)

    UI enables device selector + unhide various stuff
    

(显然)没有通过Java Script从客户端重置块的方法,但是有没有一种方法可以检测到用户撤销了该块? (或者在那儿?听起来好像可以被用来不断循环访问请求的东西。)

一个人可以做一个循环,在这个循环中,我们会不断尝试页面的生命周期,但要避免这种情况。正在为此寻找活动。

就这一点而言,ondevicechange不会在删除块时触发事件-这在某种程度上是合乎逻辑的,因为可用设备中的设备没有变化,例如:P。


[[1]即:一个人可以问,但结果是:

MediaStreamError消息:在当前上下文中,用户代理或平台不允许该请求。名称:NotAllowedError

javascript media mediadevices
1个回答
0
投票

您应该能够从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仍不支持PermissionDescriptorworks in Chrome"camera"成员。因此,对于该浏览器,最接近的是通过轮询,如本问答中所述:"microphone"

© www.soinside.com 2019 - 2024. All rights reserved.