Mos*_*atz 5 permissions google-chrome webrtc getusermedia
我有一个 Web 应用程序,它通过getUserMedia. 我目前有多个子域,像运行此应用程序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)
Run Code Online (Sandbox Code Playgroud)
(是的,我知道它对thenand做同样的事情catch,但在这种情况下无关紧要。)
在工作站点(stage例如)上,这是控制台中的结果:
Promise {<pending>}
MediaStream {id: "RANDOM_CHARS", active: true, onaddtrack: null, onremovetrack: null, onactive: null, …}
Run Code Online (Sandbox Code Playgroud)
在非工作站点上,它只显示Promise {<pending>},但既不then也不catch记录任何内容,因为它永远不会以任何方式解析。
我发现如果我进入站点设置 ( chrome://settings/content/siteDetails?site=https%3A%2F%2Ftest.example.com) 并更改Microphone为Allow,那么我可以刷新页面并且它可以正常工作。如果我将其改回Ask,我会再次得到相同的行为 - 它不会询问。
这种行为适用于我测试过的任何站点和任何权限 - 将Allowed 权限改回Ask不要求。然而,在这个特定的test站点上,我今天之前从未尝试使用它,所以没有理由将它设置为Allow然后返回Ask来触发该行为。
在所有这些情况下,都按预期navigator.permissions.query({name: "microphone"}).then(console.log)返回PermissionStatus {state: "prompt", onchange: null}。
如何让 Chrome 再次提示麦克风许可?
| 归档时间: |
|
| 查看次数: |
2169 次 |
| 最近记录: |