Google Chrome未显示麦克风权限提示

时间:2018-01-17 20:25:49

标签: google-chrome permissions webrtc getusermedia

我有一个Web应用程序,通过getUserMedia将麦克风用于WebRTC。我目前在多个子域上运行此应用程序,例如test.example.comstaging.example.comproduction.example.com等。 在大多数情况下,它运作正常。

在其中一个域(test)上,我无法使用麦克风。我的代码使用回调调用getUserMedia,但回调永远不会执行,并且永远不会显示浏览器的权限提示。

我还使用开发人员工具控制台使用新的基于Promise的API重现了这种行为:

navigator.mediaDevices.getUserMedia({audio: true, video: false}).then(console.log).catch(console.log)

(是的,我知道它对thencatch做了同样的事情,但对于这种情况并不重要。)

在工作站点(例如stage),这是控制台中的结果:

Promise {<pending>}
MediaStream {id: "RANDOM_CHARS", active: true, onaddtrack: null, onremovetrack: null, onactive: null, …}

在非工作网站上,它只显示Promise {<pending>},但thencatch都没有记录任何内容,因为它从未以任何方式解析。

我发现,如果我进入网站设置(chrome://settings/content/siteDetails?site=https%3A%2F%2Ftest.example.com)并将Microphone更改为Allow,那么我可以刷新页面并使其正常运行。如果我将其更改回Ask,我会再次获得相同的行为 - 它不会问。

对于任何网站以及我测试过的任何权限,这种行为都是如此 - 将Allow ed权限更改回Ask并不# 39;不要问。但是,在这个特定的test网站上,我从未尝试过使用它,因此没有理由将它设置为Allow然后再回到Ask触发这种行为。

在所有这些情况下,navigator.permissions.query({name: "microphone"}).then(console.log)按预期返回PermissionStatus {state: "prompt", onchange: null}

如何让Chrome再次提示获得麦克风权限?

1 个答案:

答案 0 :(得分:-1)

您需要一个使用 https 协议的有效域,才能让 Chrome 提示授予权限。