是否可以使WebView控件读取本地html文件?

时间:2019-04-04 12:47:18

标签: vb.net winforms windows-community-toolkit visual-studio-2019

我正在使用WebView控件制作应用程序。我希望它读取本地html文件。但是我找不到正确的方法来实现它。

起初,我只是尝试使用Navigate方法,并以“ file:///〜”格式的字符串作为参数提供文件路径,但这没有用。

https://docs.microsoft.com/ja-jp/windows/communitytoolkit/controls/wpf-winforms/webview-known-issues

此Microsoft页面说WebView控件无法识别“ file:///〜”协议。 并显示了使WebView控件读取本地html文件的3种解决方案。

  1. 使用NavigateToLocal()方法。
  2. 使用NavigateToLocalStreamUri()方法。
  3. 使用NavigateToString()方法。

我尝试了所有方法,但是每3个方法都有一些问题使其无法正常工作。

  1. NavigateToLocal方法需要文件的相对路径(不是绝对路径),相对于应用程序可执行目录。因此,该方法无法读取应用程序目录中其他位置的文件。
  2. 根据页面甚至未实现NavigateToLocalStreamUri方法!无论如何,我曾经尝试过,但是它返回了一个异常并且没有用。
  3. NavigateToString方法可以呈现给定的html内容字符串,但是无法加载html代码包含的外部文件(如css,js,图像文件),因此它没有提供完整的功能。

我找到了一些使用NavigateToLocalStreamUri方法的示例,并自己尝试了。

(VB.NET)

wvwMain.NavigateToLocalStreamUri(uri, New StreamUriResolver())


Public Class StreamUriResolver : Implements IUriToStreamResolver
    Public Function UriToStream(uri As Uri) As Stream Implements IUriToStreamResolver.UriToStream
        Return New FileStream(uri.LocalPath, FileMode.Open)
    End Function
End Class

通过此代码,NavigateToLocalStreamUri方法返回System.Resources.MissingManifestResourceException。

我想实现的非常简单。

  • 使用WebView控件
  • 读取位于本地存储中任何位置的本地html文件
  • 并按预期结果完全呈现html文件

但是我现在看不到这条路。 非常感谢您的建议或帮助。

2 个答案:

答案 0 :(得分:1)

方法NavigateToLocalStreamUri不起作用。请参阅https://docs.microsoft.com/en-us/windows/communitytoolkit/controls/wpf-winforms/webview-known-issues。 您必须使用NavigateToLocal,但是会看到一条警告,表明它已被弃用。但是,它仅适用于相对路径。您是否可以重组应用程序,以便可以使用相对路径?

NavigateToLocal方法是我发现调用Microsoft.Toolkit.Forms.UI.Controls.Web WebView v6.0中的本地HTML文件的唯一方法。

答案 1 :(得分:0)

在Visual Studio 2019 Windows 10上,以下VB.NET代码可在我的PC上运行

Imports System.IO

Dim sFileName = Application.StartupPath & "/MyPage.html"
wv.NavigateToString(System.IO.File.ReadAllText(sFileName))

其中wv是一个WebView对象。