javascript - Google Chrome 的 webkitGetUserMedia - 如果用户忽略对话框怎么办?

标签 javascript google-chrome getusermedia

所以 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 网址栏中的摄像头图标来改变他们的决定。
  • 当然,如果调用成功,则用户已接受,并照常继续。

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

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

我可以向这里的任何人确认这是否是“以某种方式”打算的,或者我是否遗漏了什么?

最佳答案

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

Issue 252904: Infobar popup on mic/cam permission results in unexpected permission state; causes unrecoverable lack of permission on reload

目前有two patches在该错误的评论线程中,因此至少您知道他们正在努力解决该问题。不幸的是,目前似乎没有针对该错误的任何真正的解决方法。

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

关于javascript - Google Chrome 的 webkitGetUserMedia - 如果用户忽略对话框怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17577532/

相关文章:

javascript - JQuery - 日期选择器不出现

google-chrome - Vuejs 无法在 IE 上运行

google-chrome - Chrome WebRTC 屏幕共享扩展需要刷新

javascript - 处理 HTML5 位置的最佳 JQuery 插件是什么?

javascript - setState 和 JSX props 不应使用箭头函数

javascript - 如果选中复选框,则更改类 bg

javascript - Safari 和 Chrome 中的 iframe 问题

即使鼠标静止不动,也会调用 jQuery mousemove()

javascript - 使用 getuserMedia() Javascript 拍摄的图像分辨率不佳

javascript - 当前不支持使用 applyConstraints 切换 facesMode(媒体流 Api)