【问题标题】:Is it possible to make WebView control to read local html files?是否可以让 WebView 控件读取本地 html 文件?
【发布时间】:2019-08-26 05:39:42
【问题描述】:

我正在制作一个带有 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 文件完全呈现为预期结果

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

【问题讨论】:

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


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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-03
        • 2018-07-28
        • 1970-01-01
        • 2013-06-23
        • 2020-12-23
        • 1970-01-01
        相关资源
        最近更新 更多