使用.NET Framework 4.8 WinForm webView 控件展示本地 HTML

5
我需要显示一个包含内部或外部样式表中的图片和字体的本地HTML文件。我想在WinForms中使用.NET Framework 4.8引入的新webView控件。
我尝试了几种不同的方法。通过托管HTTP服务器可以让字体和图片正常工作,但是这并不是一个解决方案,因为在部署程序时每台个人电脑都需要太多配置。
将图像和字体编码为base64字符串并将其用作源可以正常工作。但我想使用NavigateToLocalStreamUri方法来获得一种易于阅读且不需要过多开销的解决方案。
NuGet包Microsoft.Toolkit.Forms.UI.Controls.WebView已安装到其最新稳定版本5.1.1。
下面是我目前正在使用的代码,试图让NavigateToLocalStreamUri运行起来。
var uri = new Uri(someLocalPath);
webView1.NavigateToLocalStreamUri(uri, new CustomUriToStreamResolver());

private class CustomUriToStreamResolver : IUriToStreamResolver
        {
            public Stream UriToStream(Uri uri)
            {
                var stream = new FileStream(uri.AbsolutePath, FileMode.Open);
                return stream;
            }
        }

预期行为是打开位于 someLocalPath 的 HTML 文件,但实际上会抛出以下异常,我并不完全理解。
Could not find any resources appropriate for the specified culture or the
neutral culture. Make sure \"Microsoft.Toolkit.Win32.UI.Controls.DesignerUI.resources\"
was correctly embedded or linked into assembly
\"Microsoft.Toolkit.Forms.UI.Controls.WebView\" at compile time, or that all
the satellite assemblies required are loadable and fully signed.

问题出在我的CustomUriToStreamResolver上吗?还是有我不知道的潜在问题?

如果你知道其他在WinForm中用webView控件打开someLocalPath HTML文件的方法,请告诉我。


1
我没有答案,我只是想说我也在尝试实现webview 5.1.1。我正在使用它来浏览一个Intranet网站。但是,如果不启用IsPrivateNetworkClientServerCapabilityEnabled标志,则无法实现此目的。当启用此标志时,我遇到了与您相同的问题。请确保“Microsoft.Toolkit.Win32.UI.Controls.DesignerUI.resources”已正确嵌入或链接到程序集中...有任何消息吗? - jasttim
1
此控件由 Edge 团队拥有/操作。您最好去获取该控件的 repo 并向他们询问。文档在这里:https://learn.microsoft.com/en-us/dotnet/api/microsoft.toolkit.forms.ui.controls.webview?view=win-comm-toolkit-dotnet-stable Github repo 位于这里:https://github.com/windows-toolkit/Microsoft.Toolkit.Win32 - Slownomad
1
我也在关注同样的问题,并在此处打开了一个功能请求:https://github.com/windows-toolkit/Microsoft.Toolkit.Win32/issues/176 - Jeremy
2个回答

0

不要使用当前目录或获取程序集,而是使用Application.ExecutablePath属性:

//using System.IO;  

string applicationDirectory = Path.GetDirectoryName(Application.ExecutablePath);

string myFile = Path.Combine(applicationDirectory, "Sample.html");

webMain.Url = new Uri("file:///" + myFile);

0

webView.NavigateToLocal("本地文件") 似乎可以工作:

this.webView.NavigateToLocal(".\\file.html");

我不确定为什么导航不起作用。

编辑:Visual Studio显示NavigateToLocal已过时,应改用NavigateToLocalStreamUri。请参见https://learn.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.webview.navigatetolocalstreamuri

编辑#2:我无法让NavigateToLocalStreamUri与引用本地文件的Uri一起使用。最终在我的IUriToStreamResolver实现中硬编码了本地文件名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接