Winform webbrowser自定义字体未显示

时间:2017-07-28 23:56:58

标签: c# winforms fonts webbrowser-control

我正在使用C#WebBrowser控件(Winforms)并通过.DocumentText属性将标记传递给它。

该文档链接到某些使用@font-face规则的css,该规则在本地(和服务器)运行时有效,但在被Web浏览器控件使用时

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 个答案:

答案 0 :(得分:4)

事实证明这里存在两个问题。我终于设法绕过他们,所以我会在这里分享问题和解决方案,希望将来可以节省别人的时间。

问题#1
浏览器控件正在显示安全警告(由于.ScriptErrorsSuppressed设置为false而被禁止)。在研究了如何自动抑制安全错误之后,我在这里找到了盛江关于这个主题的优秀博客文章 - https://jiangsheng.net/2013/07/17/howto-ignoring-web-browser-certificate-errors-in-webbrowser-host/

问题#2
在感到沮丧之后,我调查了几个商业选择,而Essential Objects中的那个看起来很有前途(https://www.essentialobjects.com) - 虽然这仍然没有渲染我的页面(尽管他们的示例应用程序确实如此)。

在深入挖掘他们的WebView控件之后,我挂了它暴露的所有javascript控制台事件,并在访问我的页面时收到了一条有用的错误消息:

Access to Font at 'https://localhost:1234/fonts/foo.ttf' from origin 'https://localhost:1234' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

最后,还有一些工作要做!我暂时允许我的服务器上的任何来源并且页面开始正确呈现(注意 - 你真的不要想要在生产服务器上执行此操作 - 这只是为了测试)。

这也适用于Winforms控件(虽然已经与Sheng Jiang的互操作分类以解决第一个问题),所以这里的解决方案只是为我的字体资产正确配置CORS策略。