3

假设我在浏览器中使用 getUserMedia javascript api。浏览器会询问用户是否允许使用摄像头或麦克风。

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

4

3 回答 3

2

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

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。

我已经写了更多关于主题@使用权限 API 检测用户允许或拒绝相机访问的频率

于 2019-05-03T11:04:17.950 回答
1

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

于 2012-11-13T05:05:46.443 回答
1

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

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

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

于 2012-11-13T05:13:21.130 回答