使用 WebVIew2 (Windows) 在当前目录中加载本地 HTML 文件
Posted
技术标签:
【中文标题】使用 WebVIew2 (Windows) 在当前目录中加载本地 HTML 文件【英文标题】:Load a local HTML file in the current directory with WebVIew2 (Windows) 【发布时间】:2021-12-08 20:03:26 【问题描述】:我正在尝试创建一个准系统 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
错误页面.
【问题讨论】:
问题中的代码webView.CoreWebView2.NavigateToString(text);
应该可以工作。我建议重新阅读minimal reproducible example 发布代码指南和edit 相应的问题。 IE。如果您在 显示 HTML 内容时遇到问题 - 删除所有与文件相关的代码并将 text
设置为某个常数,如果您在定位文件时遇到问题 - 相应地调整代码并解释您所看到的结果/预期结果.
您是否尝试将 Source 设置为 file:///c:\temp\default.html
(替换为实际路径) - 注意 3 /
我回家后会试试看(下班后有朋友过生日)。我改用file:\\\
。
@AlexeiLevenkov 所以我在没有this.webView.Source
行的情况下尝试了它,但它仍然没有显示任何内容 - 甚至没有错误,就像应用程序中不存在 WebView 表单一样。
@mtk: WebView
与 WebView2
不同。 WebView2
的文档在这里:docs.microsoft.com/en-us/microsoft-edge/webview2/…
【参考方案1】:
SetVirtualHostNameToFolderMapping 函数可以帮助解决这个问题。它使您可以将文件夹中的文件提供给 WebView2,并从文档中注意这一点:
相对路径被解释为相对于应用程序的 exe 所在的文件夹。
所以这样的事情应该可以解决问题:
webView.CoreWebView2.SetVirtualHostNameToFolderMapping(hostName: "mycoolapplication",
folderPath: "",
accessKind: CoreWebView2HostResourceAccessKind.Allow);
webView.CoreWebView2.Navigate("https://mycoolapplication/main.html");
【讨论】:
以上是关于使用 WebVIew2 (Windows) 在当前目录中加载本地 HTML 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 WebResourceRequested 事件中为 WebView2 设置 cookie