Javascript 如何检测浏览器向用户请求设备权限?
假设我正在浏览器中使用getUserMedia javascript api。浏览器会请求用户允许使用摄像头或麦克风Javascript 如何检测浏览器向用户请求设备权限?,javascript,browser,user-permissions,Javascript,Browser,User Permissions,假设我正在浏览器中使用getUserMedia javascript api。浏览器会请求用户允许使用摄像头或麦克风 如何检测浏览器何时请求这些权限,以便向用户解释应用程序请求权限的原因?这是一个本机UI功能,不暴露于JavaScript,因此无法检测对话框何时出现。但是,所有支持getUserMedia的浏览器都会请求权限,因此如果您检测到对getUserMedia 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之前,要求用户输入(比如按下按钮或其他)可能是个好主意。