Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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 如何检测是否已在chrome中授予麦克风权限_Javascript_Google Chrome - Fatal编程技术网

Javascript 如何检测是否已在chrome中授予麦克风权限

Javascript 如何检测是否已在chrome中授予麦克风权限,javascript,google-chrome,Javascript,Google Chrome,我想检测一下,当我的站点加载时,是否授予了麦克风权限,而没有实际运行以下内容: navigator.webkitGetUserMedia({audio: active}, function(){alert('worked')}, function(){alert('failed')}); 是否有一个简单的API来检测用户是否已永久授权麦克风访问我的应用程序(通过https运行)?您已经获得了检查权限的轮询方法。 以下是来自MDN的一些信息: 还有一些: 以下是一个例子:

我想检测一下,当我的站点加载时,是否授予了麦克风权限,而没有实际运行以下内容:

navigator.webkitGetUserMedia({audio: active}, 
    function(){alert('worked')}, 
    function(){alert('failed')});

是否有一个简单的API来检测用户是否已永久授权麦克风访问我的应用程序(通过https运行)?

您已经获得了检查权限的轮询方法。 以下是来自MDN的一些信息:

还有一些:

以下是一个例子:

navigator.getMedia (
// constraints
   {
      video: true,
      audio: true
   },

   // successCallback
   function(localMediaStream) {
      var video = document.querySelector('video');
      video.src = window.URL.createObjectURL(localMediaStream);
      video.onloadedmetadata = function(e) {
         // Do something with the video here.
      };
   },

   // errorCallback
   function(err) {
    console.log("The following error occured: " + err);
   }

);
更新
麦克风
已添加到,即使它在Safari或Internet Explorer上尚不可用

您可能希望可以从权限api访问它,但事实并非如此:(

也许在该功能中,它可以像其他功能一样工作:

旧答案 我认为唯一可行的方法是,在请求权限时,使用localStorage中的键/值项自己跟踪这一点

不幸的是,当它被更改时,它不会通知您

// initialization
if( localStorage.getItem('voice_access') === null ){
    // just assume it is prompt
    localStorage.setItem('voice_access', 'prompt');
}

// Then somewhere
navigator.getUserMedia({ audio: true }, function (e) {
    // http://stackoverflow.com/q/15993581/1008999
    //
    // In chrome, If your app is running from SSL (https://),
    // this permission will be persistent.
    // That is, users won't have to grant/deny access every time.
    localStorage.setItem("voice_access", "granted");

}, function (err) {
    if (err.name === 'PermissionDismissedError') {
        localStorage.setItem('voice_access', 'prompt')
    }
    if (err.name === 'PermissionDeniedError') {
        localStorage.setItem('voice_access', 'denied')
    }
})


你可以更进一步,用上面的代码构建一个漂亮的小包装器,扩展/替换权限api来处理更多的枚举名称,并创建一个api来在更改时告诉其他选项卡。但是为什么要让它变得如此复杂…?localStorage不能100%可信。它可以在任何时间使用权限和存储进行更改清除了导航器。getUserMedia现在已过时,由MediaDevices.getUserMedia取代。getUserMedia返回一个承诺。如果承诺被拒绝,您将收到一个带有问题指示的DomeException。权限不足是其中一个选项

详情如下:

他询问如何获取权限状态,这意味着在没有用户媒体流的情况下,您可以在屏幕区域之外创建媒体流,然后您进行检查,用户不知道/不介意。就像html5游戏的缓冲区画布一样。上述第一个snipet并不像您所指出的那样用于音频。但是无论如何,我们可以在那里找到它的位置状态?非常有用的@uncible.
navigator.permissions.query({name:'microscopy'})。然后(…)
navigator.permissions.query({name:'camera'})。然后(…)
现在在Chrome上可用(>=69)并在
允许
拒绝
提示中返回状态
谢谢!
// initialization
if( localStorage.getItem('voice_access') === null ){
    // just assume it is prompt
    localStorage.setItem('voice_access', 'prompt');
}

// Then somewhere
navigator.getUserMedia({ audio: true }, function (e) {
    // http://stackoverflow.com/q/15993581/1008999
    //
    // In chrome, If your app is running from SSL (https://),
    // this permission will be persistent.
    // That is, users won't have to grant/deny access every time.
    localStorage.setItem("voice_access", "granted");

}, function (err) {
    if (err.name === 'PermissionDismissedError') {
        localStorage.setItem('voice_access', 'prompt')
    }
    if (err.name === 'PermissionDeniedError') {
        localStorage.setItem('voice_access', 'denied')
    }
})