在此链接中
它向我们展示了如何使用ResourceMap共享带有文本和图像内容的HTML。
但是相应的文章没有向我们展示如何阅读它并将其正确放入网络视图中。
我知道如何取回资源地图,但我不知道如何最好地将其放入WebView
中。
this.sharedResourceMap = await this.shareOperation.Data.GetResourceMapAsync();
foreach (KeyValuePair<string, RandomAccessStreamReference> item in this.sharedResourceMap)
{
ResourceMapValue.Text += "nKey: " + item.Key;
}
Item.Key
会像ms-appx:///Assets/Logo.png
您应该利用类IUriToStreamResolver
。
在下面的示例中,我加载位于Assets
文件夹中的 HTML 文件(示例.html(。Assets
文件夹还包含 HTML 文件的所有图像。应重写GetContent
IUriToStreamResolver
方法,以将对 HTML 文件中指定的 URI(例如 (的任何请求转换为本地 uri 路径。在您的情况下,您可能需要调整GetContent
以便检索资源映射存储的文件。
public sealed partial class WebViewLocalImage : Page
{
public WebViewLocalImage()
{
this.InitializeComponent();
Loaded += MainPage_Loaded;
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
var uri = this.myWebView.BuildLocalStreamUri("InternalAssets", "example.html");
this.myWebView.NavigateToLocalStreamUri(uri, new StreamUriResolver());
}
}
public sealed class StreamUriResolver : IUriToStreamResolver
{
public IAsyncOperation<IInputStream> UriToStreamAsync(Uri uri)
{
string path = uri.AbsolutePath;
return GetContent(path).AsAsyncOperation();
}
private async Task<IInputStream> GetContent(string URIPath)
{
try
{
Uri localUri = new Uri("ms-appx:///Assets/" + URIPath);
StorageFile f = await StorageFile.GetFileFromApplicationUriAsync(localUri);
IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read);
return stream.GetInputStreamAt(0);
}
catch (Exception)
{
System.Diagnostics.Debug.WriteLine("Invalid URI");
}
return null;
}
}