vb.net - 是否可以让 WebView 控件读取本地 html 文件?

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

我正在制作一个带有 WebView 控件的应用程序。我希望它读取本地 html 文件。但我找不到使之成为可能的正确方法。

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

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

此 Microsoft 页面表示 WebView 控件无法识别“file:///~”协议(protocol)。 并展示了3种让WebView控件读取本地html文件的方案。

  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 文件

但我现在看不到路。 我将不胜感激你的建议或帮助。

最佳答案

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 文件的唯一方法。

关于vb.net - 是否可以让 WebView 控件读取本地 html 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55516387/

相关文章:

c# - 最小化表单到通知区域

c# - UWP XAML BladeView 控件 - 将新创建的 BladeItem 滚动到 View 中

c# - 将 .NET P/Invoke 代码组织到 Win32 API 的最佳实践

regex - 电子邮件地址的本地部分是否有最小长度要求?

vb.net - 将图像复制到剪贴板并将其粘贴为文件(vb.net)

sql - 如何定义要在 VB.NET 中使用的 Sql Server 连接字符串?

c# - 等到我的 BackgroundWorker 完成才能打开新的 BackgroundWorker

c# - 从 PictureBox 中获取指定颜色的所有像素点

C# UWP 工具包 DropShadowPanel 内部阴影

uwp - DropShadowPanel 适应按钮模板样式