【发布时间】:2018-01-17 20:25:48
【问题描述】:
我有一个通过getUserMedia 将麦克风用于 WebRTC 的 Web 应用程序。我目前在多个子域上运行此应用程序,例如test.example.com、staging.example.com、production.example.com 等。
在大多数情况下,它都能正常工作。
在其中一个域 (test) 上,我无法使用麦克风。我的代码用回调调用getUserMedia,但是回调永远不会执行,浏览器的权限提示也永远不会显示。
我还使用基于 Promise 的新 API 使用开发者工具控制台重现了这种行为:
navigator.mediaDevices.getUserMedia({audio: true, video: false}).then(console.log).catch(console.log)
(是的,我知道它对then 和catch 做同样的事情,但对于这种情况并不重要。)
在工作站点上(例如stage),这是控制台中的结果:
Promise {<pending>}
MediaStream {id: "RANDOM_CHARS", active: true, onaddtrack: null, onremovetrack: null, onactive: null, …}
在非工作站点上,它只显示Promise {<pending>},但then 和catch 都不会记录任何内容,因为它永远不会以任何方式解决。
我发现如果我进入站点设置(chrome://settings/content/siteDetails?site=https%3A%2F%2Ftest.example.com)并将Microphone更改为Allow,那么我可以刷新页面并且它可以正常工作。如果我把它改回Ask,我会再次得到同样的行为——它不会问。
对于我测试过的 any 站点和 any 权限,这种行为是正确的 - 将Allowed 权限更改回Ask 不会询问。但是,在这个特定的 test 站点上,我今天从未尝试过使用它,因此没有理由将其设置为 Allow 然后再设置回 Ask 来触发该行为。
在所有这些情况下,navigator.permissions.query({name: "microphone"}).then(console.log) 按预期返回PermissionStatus {state: "prompt", onchange: null}。
如何让 Chrome 再次提示麦克风权限?
【问题讨论】:
-
你解决了吗?我在尝试访问设备上的视频时遇到了同样的问题。
-
@WagnerBertoliniJunior 不,我仍然没有解决方案。
-
在我的情况下,这是由于应用程序(Chrome)在手机上没有这些访问权限造成的。我在手机上给了 Chrome 正确的权限,然后它开始请求权限。我只是不知道为什么该应用程序之前没有该访问权限。
-
好吧,我的案子是在桌面上,所以不是这样。
-
您能否尝试检查您的“测试”域是否在 https 上,以及证书是否没有阻止它被“信任”的问题?
标签: google-chrome permissions webrtc getusermedia