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



我正在制作一个带有WebView控件的应用程序。我希望它读取本地html文件。 但我找不到正确的方法来实现这一目标。

起初,我只是尝试使用 Navigate 方法并提供"file:///~"格式字符串中的文件路径作为参数,但它不起作用。

https://learn.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。

我想实现的非常简单。

  • 使用 Web 视图控件
  • 读取位于本地存储上任何位置的本地 html 文件
  • 并完全呈现 html 文件作为预期结果

但我现在看不到路。 感谢您的建议或帮助。

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

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

在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 对象。

相关内容

  • 没有找到相关文章

最新更新