我正在使用Xamarin.iOS,但一切都很容易翻译成ObjC / Swift .
我有一个 WKWebView ,它会加载一个远程URL(html,js,css),然后加载应用程序中本地存储的mp4视频 . 问题是这些视频没有被加载 .
该网站使用HTML 5视频标签,我通过与Javascript通信C#来设置本地网址 .
视频路径是这样的: /var/mobile/Containers/Data/Application/F535FA1C-752B-4B46-B237-6781464EE0E5/Documents/../Library/Vimeo/7b2723fa-b0f1-40c5-bc58-d43949273329.mp4 .
这是我的WKWebView设置:
var userController = new WKUserContentController();
userController.AddScriptMessageHandler(new iOSSiteWrapper(this.ViewModel, () => this.webView), "iOSWrapper");
var configuration = new WKWebViewConfiguration
{
AllowsInlineMediaPlayback = true,
UserContentController = userController
};
configuration.Preferences.JavaScriptCanOpenWindowsAutomatically = true;
configuration.Preferences.JavaScriptEnabled = true;
configuration.Preferences.SetValueForKey(NSObject.FromObject(true), new NSString("allowFileAccessFromFileURLs"));
configuration.AllowsInlineMediaPlayback = true;
configuration.AllowsPictureInPictureMediaPlayback = true;
if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
{
configuration.MediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypes.None;
}
else
{
configuration.MediaPlaybackRequiresUserAction = false;
}
this.webView = new WKWebView(
new CoreGraphics.CGRect(),
configuration)
{
WeakNavigationDelegate = this
};
// add to view hierarchy...
// this.ViewModel.HtmlContent is a string which contains the html page
this.webView.LoadHtmlString(this.ViewModel.HtmlContent, NSUrl.FromString(Constants.BASE_URL));
我在Info.plist文件中配置了ATS例外 .
更新
我试着加载这个简单的html字符串:
var videoToPlay = "file:///var/mobile/Containers/Data/Application/F535FA1C-752B-4B46-B237-6781464EE0E5/Documents/../Library/Vimeo/7b2723fa-b0f1-40c5-bc58-d43949273329.mp4";
var html = $"
this.webView.LoadHtmlString(html, NSUrl.FromString(Constants.BASE_URL));
结果是一样的 . 视频无法播放,我可以在Safari输出上看到此错误:
不允许加载本地资源:file:///var/mobile/Containers/Data/Application/F535FA1C-752B-4B46-B237-6781464EE0E5/Documents/../Library/Vimeo/7b2723fa-b0f1-40c5-bc58- d43949273329.mp4
2 nd更新
如果我加载html代码段设置本地路径作为基本URL,它的工作原理:
this.webView.LoadHtmlString(html, NSUrl.FromFilename(videoToPlay));
但是当我尝试加载远程站点时,我需要基本URL作为远程基本URL . 所以一个新的问题是:是否可以在WKWebView上设置两个基本URL?
否则,除了在本地加载整个站点之外,我还有其他选择吗?