2013-07-12 26 views
3

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

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

+0

你最终如何解决这个问题?谢谢。 –

+0

@AdamRabung在这里看到相关的问题:http://stackoverflow.com/questions/23432654/requesting-getusermedia-only-when-permission-is-not-granted我最终设置了一个标志,存储在用户的本地存储与到期。该标志在navigator.getUserMedia API的成功回调中设置。 – SirTophamHatt

回答

2

两件事情:

  • 这是特定于铬合金实现,所以你不能告诉什么权限的用户已授予,除非浏览器提供的信息到你的应用程序。 I.E.没有API可以查询此信息。
  • 这甚至不是Chrome存储的东西。如果您在advanced settings tab on this page下查看,您会发现它在每个应用程序的基础上不是一次性的。如果该应用程序要求获得超过https的权限,Chrome将只记得为特定应用程序授予了什么权限。如果它通过http请求它,那么它将忘记授予什么许可。

你最好打赌(尽管绝不是全面证明)是嗅探浏览器代理和版本。对于这个更好的实现之一,请参阅here

您将需要专门查找Chrome和任何版本> = 21.(21是引入getMediaApi的版本)。然后,它是一个简单的if检查:

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

非常感谢您的洞察! – SirTophamHatt

+0

@SirTophamHatt是的,很高兴我能帮上忙。我使用html 5的东西玩了很多,所以我遇到过这样的问题:P – Ryan

0

我偶然到了这一点,工作还算不错的方法,而且不需要Cookie(人可以更改这些设置了带外,这样的cookie可以成为不正确),或为Chrome提供一盎司的帮助(不)。

if (chrome) { 
    var madeMicDecision = false; 
    navigator.getUserMedia({whatever}, 
    function(stream) { 
     madeMicDecision = true; 
     //close the stream, move to the next page 
     //they have either just granted permission, or have in the past and it's remembered 
    }, 
    function(error) { 
     madeMicDecision = true; 
     //go to error handling page 
     //the error handling page should describe going to chrome://settings/contentExceptions#media-stream 
     //or how to allow the user media via clicking on the crossed out camera icon in the 'wonderbar' 
    } 
} 

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

我的窍门是自动显示内容,但只能延迟一段时间。之前接受或拒绝权限的人永远不会看到这些内容,因为我们的成功/失败处理程序会在延迟之前将它们移开。因此,请给getUserMedia调用一下时间来检测/反应 - 如果浏览器尚未开启,那么应该显示帮助内容。

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

不完美(真是奇怪而难过),但似乎适用于最常见的情况。