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,Chrome最近发布了一项媒体设置更新,提示用户授予允许访问其麦克风和摄像头的网站的权限。有没有办法在Javascript中检测这些设置 我有一个带有麦克风功能的flash播放器(最终将基于HTML5)。玩家目前有一个关于如何在开始会话之前授予权限的友好教程。但是,自从Chrome发布更新后,flash player和Chrome权限发生冲突,导致flash出现错误,直到用户允许/拒绝Chrome设置提示。在将播放器移动到HTML5之前,我想做的是检测浏览器是否为Chrome(具有适当版本),以

Chrome最近发布了一项媒体设置更新,提示用户授予允许访问其麦克风和摄像头的网站的权限。有没有办法在Javascript中检测这些设置

我有一个带有麦克风功能的flash播放器(最终将基于HTML5)。玩家目前有一个关于如何在开始会话之前授予权限的友好教程。但是,自从Chrome发布更新后,flash player和Chrome权限发生冲突,导致flash出现错误,直到用户允许/拒绝Chrome设置提示。在将播放器移动到HTML5之前,我想做的是检测浏览器是否为Chrome(具有适当版本),以及用户设置是否未设置,然后显示附加教程屏幕。

两件事:

  • 这是特定于Chromes实现的,因此除非Chrome向您的应用程序提供该信息,否则您无法判断用户授予了哪些权限。也就是说,没有API可以查询此信息
  • 它甚至不是Chrome存储的东西。如果你看看下面,你会发现它是基于每个应用的,而不是一次性的。Chrome只会记住为特定应用程序授予的权限,如果该应用程序通过
    https
    请求权限。如果它通过
    http
    请求它,那么它将忘记授予了哪些权限
您最好的选择(尽管并非完全证明)是嗅出浏览器代理和版本。有关此功能的更好实现之一,请参阅

您需要特别查找Chrome和任何>=21的版本。(21是引入了
getMediaApi
的版本)。然后它是一个简单的
如果
检查:

if (version >= 21){
    //ask permission though the getMediaApi 
} else{
    //ask permission though flash
}

我无意中找到了一种很好的方法,不需要cookie(人们可以在带外更改这些设置,这样cookie可能会不正确),也不需要Chrome提供一点点帮助(它不需要)

但我们也希望显示教程屏幕-如果权限设置不被记住,上面的代码将弹出chrome信息框。但是如果没有来自chrome的权限事件,或者没有查询权限的API,我们如何知道何时显示chrome+infobox教程内容

我的诀窍是自动显示内容,但只是在延迟之后。以前接受或拒绝权限的人将永远不会看到此内容,因为我们的成功/错误处理程序会在延迟之前将其移动。因此,给getUserMedia调用一点时间来检测/反应-如果浏览器还没有移动,那么是时候显示帮助内容了

setTimeout(function() { 
    if (!madeMicDescision) {
      //display chrome/infobox/getUserMedia permissions help content
    }
}, 2000);

不完美(真的很奇怪和悲伤),但似乎适用于最常见的情况。

非常感谢您的见解@是的,很高兴我能帮上忙。我经常玩HTML5的东西,所以我以前遇到过这样的问题:你最终解决了这个问题吗?谢谢。@AdamRabung请看这里的相关问题:我最后设置了一个标志,该标志以过期日期存储在用户的本地存储中。该标志在navigator.getUserMedia API的成功回调中设置。
setTimeout(function() { 
    if (!madeMicDescision) {
      //display chrome/infobox/getUserMedia permissions help content
    }
}, 2000);