在UWP WebView控件中显示本地图像

我需要编写代码,将一些HTML(通过其他方式从外部源接收)加载到WebView中,并显示此HTML中引用的图像。 这些图像将存储在Windows.Storage.ApplicationData.Current.LocalFolder中的某处。

使用本地图像的建议都没有在webview中为windows phone 8.1显示或在Webbrowser控件中使用本地图像为我工作。 如果我用web.NavigateToString(html)加载这样的HTML:

A  B 

我只是显示了AB。 我在文件:,ms-appx:和相对路径而不是文件:等之后尝试了斜杠和反斜杠,双斜线和三斜线。图像永远不会显示。 同时,如果我将其保存在HTML文件中并在我的应用程序之外打开它,它显示正常。 我还成功保存并读取了这些文件(它们实际上出现在该文件夹中,因为我的应用程序创建了它们,因此未经授权的访问不是问题)。 package.manifest包括私有网络。

我最好不要使用嵌入式base64,自定义uri解析器和其他特殊技术,因为我不是应用程序的实际开发人员。 我创建了一个获取HTML并将图像保存到本地存储的库,现在我需要演示一个易于使用的方法来可视化WebView中存储的内容,就像我之前为普通.NET框架所做的那样。 即我实际上是为我的库用户的开发人员编写示例,然后这些人将使用我的示例处理此HTML和图像。

作为最后的手段,我最终可以为我的样本的UWP版本编写base64或自定义解析器(而对于像普通.NET框架这样的其他平台,相同的过程要容易得多)。 但我想至少确保在源HTML中为图像选择正确的URL的直接途径是不可能的,我不会最终得到一些情况,我写了一些相当复杂的东西,然后有经验的UWP应用程序揭示了我过度设计了一些东西。 即一些专家意见“不,在UWP中不可能,你必须使用base64嵌入或自定义URI解析”对我也有用。

虽然NavigateToString支持内容引用外部文件,如CSS,脚本,图像和字体。 但它仅使用ms-appx-web方案支持应用程序包中的内容,并使用httphttps URI方案支持Web内容 。 它无法与位于apps本地文件夹中的资产一起使用。 所以使用file:///ms-appdata:///ms-appx:/// scheme将不起作用。

要实现您的目标,您可以使用Base64编码图像自定义URI解析器 。 此外,我认为您可以将html字符串存储到存储这些图像资源的同一子文件夹下的文件中。 在html中,您可以使用相对URI来引用这些资产,就像我之前的答案中所说的那样 。 然后使用Navigate方法和使用ms-appdata方案的Uri 。 例如:

 var html = "A  B"; var folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("folder", CreationCollisionOption.OpenIfExists); var file = await folder.CreateFileAsync("html.html", CreationCollisionOption.OpenIfExists); await FileIO.WriteTextAsync(file, html); webView.Navigate(new Uri("ms-appdata:///local/folder/html.html"));