c# - 使用 WebVIew2 (Windows) 在当前目录中加载本地 HTML 文件
问题描述
我正在尝试创建一个准系统 WebView2 应用程序,它允许我从与应用程序所在的位置相同的目录加载特定的 HTML 文件(因此,如果它在桌面上,安装在C:\Windows\
目录中C:\Users\Poopy\
,无论在哪里。HTML 文件的标题为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
错误页面。
解决方案
SetVirtualHostNameToFolderMapping函数可以帮助解决这个问题。它使您可以将文件夹中的文件提供给 WebView2,并从文档中注意这一点:
相对路径被解释为相对于应用程序的 exe 所在的文件夹。
所以这样的事情应该可以解决问题:
webView.CoreWebView2.SetVirtualHostNameToFolderMapping(hostName: "mycoolapplication",
folderPath: "",
accessKind: CoreWebView2HostResourceAccessKind.Allow);
webView.CoreWebView2.Navigate("https://mycoolapplication/main.html");
推荐阅读
- javascript - 从打字稿中的可观察值中提取值
- python - 合并一个元组在一个元组中填充我的任意数量的元组并返回排序后的
- python - 生成组合后跟每个元素
- mysql - 加快 MySQL 上的删除重复命令
- php - 使用密码连接到 SSH 并使用 shell 脚本执行一些命令?
- windows - AWS Windows GPU 实例 opengl
- apache-spark - PySpark - 如何按 ResultIterable 中的值排序?
- javascript - 使打开的 Accordion 选项卡可见
- delphi - 如何在Delphi中递归删除空目录
- python - 预期单例:sezonekip() 错误 pycharm