MacOS 上的 JavaScript 库实现 (Twilio Voice JS) 需要媒体权限,特别是麦克风权限。
要在网络浏览器中执行此操作,一个典型的调用是:
navigator.mediaDevices.getUserMedia({audio: true})
.then((e) => alert("Permissions granted"))
.catch((e) => alert("Permissions Denied"))
可以通过 evaluateJavaScript 或从本地资源加载 脚本(或 html 文件)在 WKWebView 中完成同样的操作。 在这些情况下,navigator.mediaDevices
仅在从“安全”站点(即 https)调用或本地加载时才可用。通过捆绑资源中的 html 文件。查看安全说明
问题很简单: 通过 Safari WKWebView 检查器控制台调用
getUserMedia
在终端中挂起。它没有完成。它不显示提示。 Promise 不会解决、拒绝或抛出错误,什么都没有。
背景Info.plist
包括所需的麦克风权限Audio Input
,沙箱包括蓝牙、音频输入和传出连接。
Preferences > Security & Privacy > Microphone
列出具有权限的应用程序。Safari (console) > Preferences > Websites > Microphone
不显示任何允许的权限,需要 Ask
媒体和支持文档 电流输出
enumeratedDevices
getUserMedia
和
WKWebView
的当前输出:预期产量 Safari 输出,在请求权限之前和之后显示
enumeratedDevices
问题非常简单:通过 Safari WKWebView 检查器控制台调用
getUserMedia
在终端中挂起。它没有完成。它不显示提示。 Promise 不会解决、拒绝或抛出错误,什么都没有。
问题 是什么导致了这种悬挂/我错过了什么?Github:
WKWebView