【问题标题】:navigator.mediaDevices not available on iOS 14.3navigator.mediaDevices 在 iOS 14.3 上不可用
【发布时间】:2021-09-29 17:59:22
【问题描述】:

过去,navigator.mediaDevices.getUserMedia() 在 WKWebView 上不可用,但现在已作为 iOS 14.3 的一部分添加,如以下链接所示:

  1. https://developer.apple.com/forums/thread/88052?answerId=668022022#668022022(原帖)
  2. https://caniuse.com/stream(见注3)
  3. https://webkit.org/blog/11353/mediarecorder-api

但是,我将应用程序的部署目标更新为 iOS 14.3,然后将 Safari 调试器附加到 WKWebView,但 navigator.mediaDevices 在 JS 控制台上运行时仍然返回 undefined。在上面的第三个链接中,有关于使用getUserMedia 的步骤的建议。

navigator.mediaDevices.getUserMedia 现在可以暴露给 WKWebView 应用程序。如果嵌入应用程序能够本地捕获音频或视频,navigator.mediaDevices.getUserMedia 会自动公开。请参阅 Apple 文档以满足这些要求。

为了以防万一,我已经按照这些步骤操作了,但我仍然面临同样的问题。

任何想法我可能做错了什么?有没有其他人遇到过同样的问题?

【问题讨论】:

  • 在 iOS 14.5 上测试,我看到 navigator.mediaDevices.getUserMedia 定义为:function getUserMedia() { [native code] } = $1。没有要测试的 14.3。

标签: ios wkwebview getusermedia


【解决方案1】:

我的猜测是您的内容不安全。如果您导航到 https:// 位置,navigator.mediaDevices 将可用。

请参阅此页面上的第二条注释:https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia

【讨论】:

  • 谢谢。这是根本原因,尽管在我的情况下,我在页面(顺便说一下是 https)被加载到 webview 之前访问了navigator.userAgent。结果,navigator 似乎认为这是一个不安全的来源并禁用了媒体捕获,即使在页面完成加载之后也是如此。只需删除用户代理代码就可以了。
【解决方案2】:

在 Info.plist 中添加: Privacy - Camera Usage Description https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_ios

为了让视频元素可以从您的相机播放:

let webConfiguration = WKWebViewConfiguration()
webConfiguration.allowsInlineMediaPlayback = true

玩法:https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia

【讨论】:

    猜你喜欢
    • 2021-03-29
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    相关资源
    最近更新 更多