首页 > 解决方案 > 使用 WebVIew2 (Windows) 在当前目录中加载本地 HTML 文件

问题描述

我正在尝试创建一个准系统 WebView2 应用程序,它允许我从与应用程序所在的位置相同的目录加载特定的 HTML 文件(因此,如果它在桌面上,安装在C:\Windows\目录中C:\Users\Poopy\,无论在哪里。HT​​ML 文件的标题为main.html(或者我将其更改为index.html

尽管如此,我怎样才能获得当前目录,并创建一个文件路径以在应用程序启动时加载?

经过一番摸索,这就是我的 Form1.cs 所拥有的:

if (webView != null && webView.CoreWebView2 != null) {
    string currentPath = Directory.GetCurrentDirectory();
    string text = System.IO.File.ReadAllText(currentPath + @"\main.html");
    webView.CoreWebView2.NavigateToString(text);
    this.webView.Source = new System.Uri(currentPath + @"\main.html");
}

我期望发生的事情:显示与应用程序位于同一文件夹中的空白文件。在 的情况下main.html,应该显示一个带有文本“hello world”的白页。我将能够使用 F12 拉出开发工具弹出窗口。

实际发生的情况:如果属性中没有指定来源,我会得到一个没有网页显示的空白屏幕。似乎没有出现 WebView 表单;如果我按 F12 不会弹出开发工具。如果指定了一个源,并且它是一个有效条目,我将加载 URL,或者如果我只输入文件名(假设它默认为刚刚file:///main.html输入的相对 URL),我会得到一个ERR_FILE_NOT_FOUND错误页面。

标签: c#htmlwindowswebview2

解决方案


SetVirtualHostNameToFolderMapping函数可以帮助解决这个问题它使您可以将文件夹中的文件提供给 WebView2,并从文档中注意这一点:

相对路径被解释为相对于应用程序的 exe 所在的文件夹。

所以这样的事情应该可以解决问题:

webView.CoreWebView2.SetVirtualHostNameToFolderMapping(hostName: "mycoolapplication",
                                                       folderPath: "",  
                                                       accessKind: CoreWebView2HostResourceAccessKind.Allow);

webView.CoreWebView2.Navigate("https://mycoolapplication/main.html");

推荐阅读