如何检测浏览器询问用户设备权限?

时间:2012-11-13 04:24:09

标签: javascript browser user-permissions

让我们说我在浏览器中使用getUserMedia javascript api。浏览器要求用户允许使用相机或麦克风。

如何检测浏览器何时要求这些权限,以便我可以向用户解释该应用为何要求获得许可?

3 个答案:

答案 0 :(得分:1)

据我所知,这不是直接可行的,但是你应该可以推断用户正在看到提示。

据推测,由于您正在编写javascript,因此您决定何时打电话给getUserMedia(),因此您可以提供其他说明,作为导致此问题的过程的一部分。一个精心设计的页面应该能够很好地解释发生了什么,以便用户知道之前发生了什么,他们会提示他们将网络摄像头的控制权交给他们。

也就是说,您可以推断用户在您发送请求时看到了权限提示,但未收到错误回调或成功回调。鉴于此,您可以在第一次提示获取权限的同时设置计时器,如果没有成功或错误返回几秒钟就会触发,在这种情况下,您可以合理地假设已向用户显示浏览器提示但尚未回复。

答案 1 :(得分:0)

这是本机UI功能,不会向JavaScript公开,因此无法检测对话框何时出现。但是,所有支持getUserMedia的浏览器都会请求权限,因此,如果您检测到getUserMedia API的支持,那么您可以在那时显示您的解释,而其他浏览器上的用户则看不到它。

答案 2 :(得分:0)

从Chrome 64开始,您可以使用Permissions API查询是否已授予cameramicrophone权限:

navigator.permissions.query({name:'camera'}).then(function(result) {
    alert(result.state);
    if (result.state === 'granted') {
        //permission has already been granted, no prompt is shown
    } else if (result.state === 'prompt') {
       //there's no peristent permission registered, will be showing the prompt
    } else if (result.state === 'denied') {
       //permission has been denied
    }
});

以上内容仅适用于Chrome atm。

我在{@ Using the Permissions API to Detect How Often Users Allow or Deny Camera Access