我试图创建一个barebones WebView2应用程序,让我从相同的目录加载一个特定的HTML文件,无论应用程序位于哪里(所以如果它是在桌面上,安装在C:Windows
目录,C:UsersPoopy
,无论。HTML文件的标题将是main.html
(或者我将其改为index.html
)
不过,我怎么能得到当前目录,并创建一个文件路径加载时,应用程序启动?
经过一番摸索,这就是我的form .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
错误页面。
SetVirtualHostNameToFolderMapping函数可以帮助解决这个问题。它允许你从一个文件夹向WebView2提供文件,并从文档中注意这一点:
相对路径被解释为相对于应用程序exe所在的文件夹。
所以像这样的代码应该可以达到这个效果:
webView.CoreWebView2.SetVirtualHostNameToFolderMapping(hostName: "mycoolapplication",
folderPath: "",
accessKind: CoreWebView2HostResourceAccessKind.Allow);
webView.CoreWebView2.Navigate("https://mycoolapplication/main.html");