【问题标题】:getUserMedia doesn't trigger error callback when you choose 'Not now' in Firefox当您在 Firefox 中选择“Not now”时,getUserMedia 不会触发错误回调
【发布时间】:2014-03-07 12:26:24
【问题描述】:

我正在尝试编写一个脚本来检测用户何时允许/拒绝使用麦克风,使用 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 错误?还是我的代码有问题?

【问题讨论】:

    标签: javascript firefox getusermedia


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      “不是现在”的意思正是它所说的:用户尚未决定是允许还是拒绝。用户选择它后,他们可以重新打开请求许可的弹出窗口(通过单击小视频图标,如果选择了该选项,它会一直存在)并选择是否授予它。

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

      1. 在 Firefox 中,只需在您的小提琴上出现的弹出窗口外单击即可。这会关闭弹出窗口,而不选择任何选项。
      2. 在 Chrome 中,只需忽略请求权限的信息栏,根本不点击其中的任何内容。

      您的代码应该像处理这些用户操作一样处理它。

      【讨论】:

      • 然后我想知道,有没有办法检测用户是否对浏览器弹出窗口有回答?或者像 getUserMedia isset 这样的东西?
      • 在什么意义上回答? “不是现在”是用户明确决定不回答。
      • 基本上检测用户是否有答案,因为实际上如果用户选择“现在不”,浏览器的行为与用户拒绝时的行为非常相似。因此,如果有一种方法可以检测到这一点,那就太好了。
      • 同样,“Not Now”行为明确表示用户没有选择。他们可以在选择“不立即”后重新打开对话框并选择允许。在实际否认之后,他们不能这样做。
      • 谢谢鲍里斯!,所以我一直在寻找一个事件来检测用户何时允许它,否则执行诸如块屏幕或退出或警报之类的操作,因为拒绝或“不”现在'回答 webapp 将无法正常工作。有这样的吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      相关资源
      最近更新 更多