Winform WebBrowser自定义字体未显示。

3
我正在使用C#WebBrowser控件(Winforms),并通过.DocumentText属性将标记传递给它。
文档链接到一些使用@font-face规则的CSS,当本地运行(以及从服务器运行)时可以工作,但在被WebBrowser控件消耗时无法工作。
CSS非常基本,看起来像这样:
@font-face {
    font-family: FontName;
    src: url("/fonts/fontname.ttf") format("truetype");
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

我已经尝试了这里的各种注册表建议(但都无济于事):https://weblog.west-wind.com/posts/2011/May/21/Web-Browser-Control-Specifying-the-IE-Version#FeatureDelegationviaRegistryHacks 另一个常见的建议是在标记中包含一个元标记(我已经这样做了),像这样:
<meta http-equiv="X-UA-Compatible" content="IE=edge">

我的字体已经被标记为可安装的(在IE中也可以正常工作),因此显然是WebBrowser控件存在特定问题 - 但是我花了几个小时尝试弄清楚,却不知道可能是什么问题。

有人知道我错过了什么吗?

谢谢!

1个回答

5
原来这里有两个问题。最终我设法解决了它们,所以我会在此分享问题及其解决方法,希望能节省其他人的时间。
问题#1 浏览器控件出现安全警告(因为.ScriptErrorsSuppressed设置为false而被抑制)。在研究如何自动抑制安全错误时,我发现 Sheng Jiang 在这里写得很好 - https://jiangsheng.net/2013/07/17/howto-ignoring-web-browser-certificate-errors-in-webbrowser-host/ 问题#2 在感到沮丧之后,我研究了几个商业替代品,Essential Objects 的那个看起来很有前途 (https://www.essentialobjects.com) - 尽管它仍然没有呈现我的页面(尽管他们的示例应用程序确实呈现了)。
在深入研究了他们的 WebView 控件后,我挂钩了它公开的所有 javascript 控制台事件,并在访问我的页面时获得了有用的错误消息。

访问 'https://localhost:1234/fonts/foo.ttf' 上的字体被 CORS 策略阻止:请求资源上没有 'Access-Control-Allow-Origin' 标头。因此,来自 'null' 的源不允许访问。

终于有东西可以使用了!我在服务器上暂时允许了任何来源,页面开始正确呈现(注意 - 在生产服务器上您真的不想这样做 - 这只是为了测试)。

这也适用于 Winforms 控件(虽然使用 Sheng Jiang 的互操作进行子类化以解决第一个问题),因此这里的解决方案只是为我的字体资产正确配置 CORS 策略。


请问您是如何“正确配置CORS策略”的?我找不到相关信息,虽然还在继续寻找。 - Radek Strugalski
@RadekStrugalski 微软官网通常是一个好的起点:https://learn.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2 - gplumb

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