Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测浏览器向用户请求设备权限?_Javascript_Browser_User Permissions - Fatal编程技术网

Javascript 如何检测浏览器向用户请求设备权限?

Javascript 如何检测浏览器向用户请求设备权限?,javascript,browser,user-permissions,Javascript,Browser,User Permissions,假设我正在浏览器中使用getUserMedia javascript api。浏览器会请求用户允许使用摄像头或麦克风 如何检测浏览器何时请求这些权限,以便向用户解释应用程序请求权限的原因?这是一个本机UI功能,不暴露于JavaScript,因此无法检测对话框何时出现。但是,所有支持getUserMedia的浏览器都会请求权限,因此如果您检测到对getUserMedia API的支持,那么您可以在此时显示您的解释,而其他浏览器上的用户不会看到它。据我所知,这是不可能的,但是您应该能够推断用户正在看

假设我正在浏览器中使用getUserMedia javascript api。浏览器会请求用户允许使用摄像头或麦克风


如何检测浏览器何时请求这些权限,以便向用户解释应用程序请求权限的原因?

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

据我所知,这是不可能的,但是您应该能够推断用户正在看到提示

大概,由于您正在编写javascript,因此您可以决定何时调用
getUserMedia()
,因此您可以提供额外的解释,作为导致此问题的过程的一部分。一个设计良好的页面应该能够很好地解释正在发生的事情,以便用户在被提示交出对网络摄像头的控制权之前知道发生了什么


也就是说,您可以推断,当您发送请求时,用户正在看到权限提示,但没有收到错误回调或成功回调。考虑到这一点,您可以在第一次提示权限的同时设置计时器,如果几秒钟内没有返回成功或错误,就会触发该权限,在这种情况下,您可以合理地假设用户已收到浏览器提示,但尚未响应。

从Chrome 64开始,您可以使用来查询是否已授予
摄像头
麦克风
权限:

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


我写了更多关于这个主题的文章@

谢谢。这就是我要的。无论如何,在使用getUserMedia之前,要求用户输入(比如按下按钮或其他)可能是个好主意。