最新 iOS 更新 (12.2) 后,本地存储中的视频未在 WebView (Xamarin.Forms) 中播放
Posted
技术标签:
【中文标题】最新 iOS 更新 (12.2) 后,本地存储中的视频未在 WebView (Xamarin.Forms) 中播放【英文标题】:Video from local storage not playing in WebView (Xamarin.Forms) after latest iOS update (12.2) 【发布时间】:2019-04-10 15:06:04 【问题描述】:我有一个现有的 Xamarin Forms 应用程序,适用于 android 和 ios,它在 WebView 中显示来自本地存储的一些 html 内容(目的是在离线时查看此内容)。
在最新的 iOS 更新 (12.2) 之后,该 HTML 中的视频停止工作。 视频位置显示白色背景,带有“播放”符号,但无法进行任何操作。
我尝试将视频标签更改为包括自动播放、静音,但没有成功。
<video controls>
<source src="Absolute-3D.mp4" type="video/mp4">
</video>
我希望它能够像更新前一样继续工作,但是有东西阻止了它。
【问题讨论】:
你能分享包含视频的网址吗? 嗨@JackHua-MSFT,不幸的是视频是私人的..我不能分享它。你想看什么? 我需要一个可以重现此问题的 webUrl。然后我可以在我这边测试它。 同样的问题在这里使用嵌入在 web 视图中的 JWplayer。我发送了错误报告。它可以在 safari 浏览器中运行,但不能在应用程序中运行! 是的,这个bug只显示在真实设备上,iOS 12.2。 【参考方案1】:这是一个 UIWebView 错误,我添加了下面的代码,它现在可以工作了。
self.webView.mediaPlaybackRequiresUserAction = NO;
self.webView.allowsPictureInPictureMediaPlayback = YES;
【讨论】:
是的! “webView.mediaPlaybackRequiresUserAction = 否;”为我解决了。如果您不想自动播放,请确保您的 HTML 中没有“自动播放”。我应该指出我没有使用 Xamarin。【参考方案2】:尝试将 webview 的 mediaPlaybackRequiresUserAction
设置为 NO
。我在 iOS 12.2 中看到了同样的问题(UIWebView
和 WKWebView
两者)。在 iOS 12.1 及更早版本中运行良好。
调试时,您会在 Safari 控制台中看到此错误:
Unhandled Promise Rejection: NotAllowedError: 请求不是 用户代理或平台在当前上下文中允许, 可能是因为用户拒绝了权限
https://developer.apple.com/documentation/uikit/uiwebview/1617954-mediaplaybackrequiresuseraction?language=objc
https://developer.apple.com/documentation/webkit/wkwebviewconfiguration/1614727-mediaplaybackrequiresuseraction?language=objc
【讨论】:
向苹果提交错误报告,我们会看到openradar.appspot.com/radar?id=4947640680710144【参考方案3】:我用 WKWebView 替换了 UIWebView(现在已弃用),它似乎可以再次工作,而无需更改 html 代码中的任何内容。
控制台中有一条消息说在当前上下文中未授权全屏。对我来说,它也只发生在真实设备上。
【讨论】:
我还没有让 WKWebView 在实际设备上使用本地视频文件工作。我正在使用 loadHTMLString。可能是安全问题。【参考方案4】:Unhandled Promise Rejection: NotAllowedError: 在当前上下文中,用户代理或平台不允许请求,可能是因为用户拒绝了权限。 还没解决。
【讨论】:
【参考方案5】:您需要将此添加到您的 plist 中
NSIncludesSubdomains
和 NSTemporaryExceptionAllowsInsecureHTTPLoads
像这样:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
【讨论】:
以上是关于最新 iOS 更新 (12.2) 后,本地存储中的视频未在 WebView (Xamarin.Forms) 中播放的主要内容,如果未能解决你的问题,请参考以下文章
任何人在 ios 12.2 上遇到 jquery.on('change') 或 .change() 的任何问题?
Android - 应用更新后 WebView html5 本地存储不持久
Artifactory:升级到新的 Artifactory 5.10.3 并支持新的 Pypi 后,本地 Pypi 存储库“慢”