6

所以使用 navigator.webkitGetUserMedia 的标准方式是这样的:

function success() {
    console.log('User accepted');
}

function deny() {
    console.log('User rejected');
}

navigator.webkitGetUserMedia({video: true, audio: true}, success, deny);

我正在开发的网站绝对需要使用用户的网络摄像头和麦克风(实际上是使用 Flash,但现在似乎要通过这个 API),所以我正在尽一切努力确保用户始终知道他们需要什么单击以使该站点正常工作。

  • 如果没有调用任何函数,则假定对话框正在显示,并向用户显示说明。
  • 如果调用了拒绝,请说明需要网络摄像头访问权限,并向他们展示他们可以单击 Chrome URL 栏中的摄像头图标来更改他们的决定。
  • 当然,如果调用success,那么用户已经接受,并照常继续。

这是踢球者;您可以通过将上述 Javascript 粘贴到您喜欢的任何网站(在 Chrome 中)来跟进。如果用户导航到新网页,或刷新当前页面而不接受、拒绝或关闭下拉列表,他们将不会再次看到浏览器会话的当前域的权限对话框

navigator.webkitGetUserMedia(...)再次调用将不会显示权限对话框,相机图标也不会出现在 URL 栏中。控制台甚至不记录“用户被拒绝”。更重要的是,对于许多用户来说,这个下拉菜单很容易被意外忽略。唯一可用的解决方法是完全关闭浏览器并重新打开它(或者,手动浏览我们不想强迫用户进入的复杂设置菜单)。

我可以在这里与任何人确认这是“以某种方式”意图,还是我遗漏了什么?

4

1 回答 1

6

这似乎是一个已知的错误。

问题 252904:麦克风/摄像头权限上的信息栏弹出窗口导致意外的权限状态;导致不可恢复的重新加载权限不足

目前在该错误的评论线程中有两个 补丁,所以至少你知道他们正在努力解决这个问题。不幸的是,与此同时,该错误似乎没有任何真正的解决方法。

值得一提的是:如果您关闭选项卡然后重新打开 url,这似乎会强制权限对话框再次显示。我知道这不是一个真正的解决方案,但至少比关闭整个浏览器要好(我认为这是你到目前为止一直在做的事情)。

于 2013-07-15T22:14:32.140 回答