最新 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 应用程序,适用于 androidios,它在 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 中看到了同样的问题(UIWebViewWKWebView 两者)。在 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 中

NSIncludesSubdomainsNSTemporaryExceptionAllowsInsecureHTTPLoads

像这样:

<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() 的任何问题?

HOWTO:在还原后修复不同步的 TFS 工作区

iOS 12.2是否支持PWA的GPS?

Android - 应用更新后 WebView html5 本地存储不持久

Artifactory:升级到新的 Artifactory 5.10.3 并支持新的 Pypi 后,本地 Pypi 存储库“慢”

输入[type =“file”]在ios 12.2上不起作用