我正在尝试在本地使用Xamarin在Webview中加载Web应用程序(Readium)。作为目标,我有UWP,Android和iOS。 我无法打开index.html页面,根据https://developer.xamarin.com/guides/xamarin-forms/user-interface/webview/,我已在每个项目中嵌入了网页,但我得到一个空白页面。
为每个应用程序实现了依赖服务,例如(UWP)
assembly: Dependency(typeof(BaseUrl))]
namespace WorkingWithWebview.UWP
{
public class BaseUrl : IBaseUrl
{
public string Get()
{
return "ms-appx-web:///";
}
}
}
但是,创建一个新的UWP项目(没有Xamarin),它运行良好,使用方法NavigateToLocalStreamUri(uri,new StreamUriWinRTResolver())和
public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
{
if (uri == null)
{
throw new Exception();
}
string path = uri.AbsolutePath;
return GetContent(path).AsAsyncOperation();
}
private async Task<IInputStream> GetContent(string path)
{
try
{
Uri localUri = new Uri("ms-appx:///cloud-reader" + path);
StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri);
IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read);
return stream;
}
catch (Exception)
{
throw new Exception("Invalid path");
}
}
在Xamarin Forms中以同样的方式完成同样的事情? 谢谢你。
答案 0 :(得分:2)
最后,我实现了加载本地内容,为每个平台添加自定义渲染。
示例(UWP):
[assembly: ExportRenderer(typeof(WebView), typeof(WebViewRenderer))]
namespace DisplayEpub.UWP{
public class CustomWebViewRenderer : WebViewRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
var customWebView = Element as WebView;
Control.Source = new Uri(string.Format("ms-appx-web:///Assets/pdfjs/web/viewer.html"));
}
}
}
}
我遵循Xamarin文档的示例,使用自定义渲染显示PDF,定位3个平台。我在Android和Windows上测试过它: https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/controls/display-pdf/