【问题标题】:How can I detect the browser asking a user for device permissions?如何检测浏览器向用户询问设备权限?
【发布时间】:2012-11-01 13:50:00
【问题描述】:

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

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

【问题讨论】:

    标签: javascript browser user-permissions


    【解决方案1】:

    从 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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 谢谢。这就是我一起去的。在使用 getUserMedia 之前要求用户输入(如按钮按下或其他)可能是个好主意。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-06
        相关资源
        最近更新 更多