在Firefox中选择“不是现在”时,getUserMedia不会触发错误回调

时间:2014-03-07 12:26:25

标签: javascript firefox getusermedia

我正在尝试使用getUserMedia API编写一个脚本来检测用户何时允许/拒绝使用麦克风。

编辑:我已经向你展示了这个问题:http://jsfiddle.net/4rgRY/

navigator.getUserMedia  = navigator.getUserMedia ||
                      navigator.webkitGetUserMedia ||
                      navigator.mozGetUserMedia ||
                      navigator.msGetUserMedia;

if (navigator.getUserMedia) {
  navigator.getUserMedia({audio: true, video: false}, function(stream) {
    console.log('Yayy!');
  }, function(err){
    console.log("There was an error->: ",err);
  });
} else {
  console.log('getUserMedia not supported');
}

它在Chrome上工作正常,但是当我在Firefox(27和Firefox Nightly 30a1)中尝试,并且您选择“不是现在”时,它不会触发任何回调,无论是成功还是错误回调。所以我的应用程序认为允许但不能正常工作。

如果您在Firefox中选择任何其他选项,例如“始终共享”,“永不共享”或“不共享”,则工作正常,只需使用“不立即”选项。

可能是Firefox的错误?或者我的代码有问题吗?

2 个答案:

答案 0 :(得分:1)

“不是现在”意味着它所说的内容:用户尚未决定是否允许或拒绝。在用户选择它之后,他们可以重新打开要求许可的弹出窗口(通过单击小视频图标,如果选择该选项,则会选中该图标)并选择是否授予它。

基本上,单击“Not now”与以下用户操作完全相同:

  1. 在Firefox中,只需点击小提琴上弹出的弹出窗口即可。在没有选择任何选项的情况下,它会取消弹出窗口。
  2. 在Chrome中,只需忽略请求权限的信息栏,而不是点击任何内容。
  3. 并且您的代码应该像处理这些用户操作一样处理它。

答案 1 :(得分:1)

我想答案并没有真正给出。我的应用如何检测用户决定不做出选择的事实?没有做出选择意味着我的应用程序无法访问摄像头和麦克风,因此它应该在getUserMedia IMO中触发错误回调。