嘿,所有我正在使用新的WebView2与我的WinForms应用程序。我可以让它显示我创建的动态HTML,但它有“”当它试图加载页面的图像。
图像标记如下所示:
<div id="animation1" style="display: inline-flex;">
<img src="file:///C:\Users\admin\source\repos\wCondictions\bin\x86\Debug\Resources/nice.gif" style="height: 110px; width: 110px;">
<span class="imgWeather">Nice</span>
</div>
我目前使用的代码如下:
fileNames = new DirectoryInfo(resourcePath)
.GetFiles()
.OrderBy(p => Path.GetFileNameWithoutExtension(p.Name))
.Select(fi => fi.Name)
.ToArray();
string blah = Path.Combine(Application.StartupPath, "Resources");
string fullHtml = string.Empty;
string HeaderHtml = "<!DOCTYPE html>\n" +
"<html>\n" +
"<style>\n" +
".imgW {\n" +
"position: absolute;\n" +
"z-index: 10;\n" +
"color: red;\n" +
"width: 110px;\n" +
"height:30px;\n" +
"text-align: center;\n" +
"vertical-align: middle;\n" +
"top: 88px;\n" +
"background-color: aquamarine;\n" +
"font-family: Arial;\n" +
"font-size: small;\n" +
"}\n" +
"</style>\n" +
"<body style=\"background-color: #00000;\">";
string dynamixImg = "<div id=\"animation1\" style=\"display: inline-flex;\">\n" +
"<img src=\"file:///" + blah + "/{0}\" style=\"height: 110px; width: 110px;\" />\n" +
"<span class=\"imgW\">{1}</span>\n" +
"</div>";
string FooterHtml = "</body>" +
"</html>";
for (int a = 0; a < fileNames.Count(); a++)
{
fullHtml += string.Format(
dynamixImg,
fileNames[a],
fileNames[a]
.Replace(".gif", "")
.Replace("&", "&&")
) + "\n";
}
await webView21.EnsureCoreWebView2Async();
webView21.CoreWebView2.SetVirtualHostNameToFolderMapping(
"Resources",
@"C:\Users\admin\source\repos\wCondictions\bin\x86\Debug\Resources\",
CoreWebView2HostResourceAccessKind.Allow
);
webView21.NavigateToString(HeaderHtml + fullHtml + FooterHtml);
我已经看到很多地方,它说使用SetVirtualHostNameToFolderMapping,但即使这样,它仍然说同样的错误。
因此,我不确定我错过了什么,或者误解了如何使用SetVirtualHostNameToFolderMapping以允许映像在本地加载?
2条答案
按热度按时间643ylb081#
好吧,我再试一次,我的第一个答案是混乱的。
出现此错误是因为使用了
file://
协议。您似乎还没有完全理解
SetVirtualHostNameToFolderMapping
的用法。通过调用
SetVirtualHostNameToFolderMapping
设置虚拟服务器后,应像使用Internet上的任何其他服务器一样使用该虚拟服务器。请勿使用file://
!因此,您所要做的就是编辑您的
HeaderHtml
和<img src
。HeaderHtml
应包含<base>
标记,该标记应指向您的虚拟服务器根目录:这使得构建动态
<ìmg>
标记变得非常容易,源代码只是文件名:现在
WebView2
将把它转换成一个文件路径并获取图像!作为旁注,您还可以通过在文件名前面添加文件夹名来包含子文件夹中的文件,如下所示:
zphenhs42#
为了跟进这一点,并给予一个清晰的示例,这是您需要做的。这适用于截至2023年的当前WebView 2控件(版本1.0.1671-prerelease)。您可能需要在不同版本上调整语法。
以下代码设置文件夹Map:
这样就不用引用本地路径
在HTML字符串中,现在引用了
最后打电话给
并且您的本Map像将正确显示在页面中。
如果您将应用程序发布为ClickOnce应用程序,则这也适用于最终用户。