xamarin.forms webview baseurl无法在设备上工作(iOS 10.1)
问题描述:
我有一个xamarin.forms应用程序,它使用HybridWebView(https://developer.xamarin.com/guides/xamarin-forms/custom-renderer/hybridwebview/)来显示一个html文档。我使用baseUrl将本地css和js加载到文档中。此代码在iOS 9.x上运行良好。xamarin.forms webview baseurl无法在设备上工作(iOS 10.1)
但是,我升级到iOS 10后,代码在iOS模拟器上工作,但不在实际设备上。在设备上,它不会从本地存储装载css。
这里是我正在使用的测试代码。它适用于模拟器,但不适用于设备。
async void Handle_TestButtonClicked (object sender, System.EventArgs e)
{
string css = @"
body {
background-color: powderblue;
}
h1 {
color: blue;
}
p {
color: red;
}
";
var folder = await AppGlobals.AppStorage.GetContentFolder();
string filename = "styles.css";
await AppGlobals.AppStorage.WriteToFile (folder, filename, css);
string html = @"<!DOCTYPE html>
<html>
<head>
<link rel=""stylesheet"" href=""styles.css"">
</head>
<body>
<h1>This is a heading</h1>
<p>This is a paragraph.</p>
</body>
</html>";
this.DocumentView.Html = html;
}
在HybridWebView,我使用下面的代码来设置的baseUrl
if (Element.Html != null) {
string baseFolderPath = await AppStorage.GetInstance().GetContentFolderPath();
var baseUrl = new NSUrl (baseFolderPath, true);
Control.LoadHtmlString (Element.Html, baseUrl);
}
我使用PCLStorage图书馆读/写本地存储。
答
我觉得LoadHtmlString被打破由编写HTML字符串到本地文件加载本地的CSS/JS等
我解决这个问题的工作,然后用LoadFileUrl加载它。这将按预期
if (!String.IsNullOrEmpty (Element.Uri)) {
string filePath = await GetFilePathInContentFolderFromUri (Element.Uri);
var fileUrl = new NSUrl (filePath, false);
Control.LoadFileUrl (fileUrl, fileUrl);
}
另一种变通方法可能是必要的CSS/JS注入到HTML文件本身并仍然使用LoadHtmlString,这个工程。