在请求之前检测UserMedia权限

时间:2016-12-18 01:25:47

标签: javascript html5 webrtc user-experience getusermedia

我想向用户解释为什么在询问相机/麦克风之前需要它们,以便他们可以做出更好的选择,如果他们想要授予它们。

为了实现我需要一种方法来检测先前是否已授予权限,以便我可以在实际询问他之前向用户解释该请求。我也不想每次都问(即使我已经拥有权限!)。

2 个答案:

答案 0 :(得分:7)

navigator.mediaDevices.enumerateDevices().then(devices => 
  devices.forEach(device => console.log(device.label)))

尚未允许的时候device.label ==“”
当允许device.label!=“”

答案 1 :(得分:4)

使用Cookie或localStorage记住您之前已经问过它们并得到肯定。

有些浏览器允许用户为相机或麦克风的每次使用授予权限,因此,如果您的指标是您不想每次都询问它们,那么请不要将您的信息与您是否获得永久访问权限相关联。

另一个答案中提到的navigator.mediaDevices.enumerateDevices技巧目前检测到对相机 和/或 麦克风的持续许可 - 但你不知道哪一个或者你是否被授予了。

此外,这可能会随着时间的推移而中断,因为最近更新了规范以解除对相机和/或麦克风持久访问的标签的访问,部分原因是为了更好地支持单用户权限用例。一旦浏览器更新到规范,它就不再意味着在这些情况下持久的摄像头和/或麦克风许可。

对是否保留权限的长期回答是使用query,但正如您在运行此操作时所看到的,浏览器尚不支持"camera"和{{1} (或者在某些情况下):

"microphone"