编程语言
首页 > 编程语言> > C#-Winform Webbrowser自定义字体未显示

C#-Winform Webbrowser自定义字体未显示

作者:互联网

我正在使用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标签(我已经完成了),如下所示:

<meta http-equiv="X-UA-Compatible" content="IE=edge">

我的字体已经被标记为可安装(并且在IE中可以正常工作),因此显然存在有关Webbrowser控件的问题-但花了数小时试图弄清楚,我对此可能有所了解.

有人知道我在这里想念的吗?

谢谢!

解决方法:

事实证明,这里有两个问题.我终于设法解决了这些问题,因此在这里我将分享问题和解决方案,以期将来可以节省其他人的时间.

第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控制台事件,并且在访问页面时收到了一条有用的错误消息:

通过CORS策略已阻止从源“ https:// localhost:1234”访问“ https:// localhost:1234 / fonts / foo.ttf”上的字体:不存在“ Access-Control-Allow-Origin”标头在请求的资源上.因此,不允许访问原始“空”.

最后,一些需要配合的东西!我暂时允许服务器上的任何原点,并且页面开始正确呈现(注意-您确实不想在生产服务器上执行此操作-只是为了测试).

这也适用于Winforms控件(尽管已与Sheng Jiang的互操作程序进行了子类化以解决第一个问题),所以这里的解决方案是为我的字体资产正确配置CORS策略.

标签:fonts,webbrowser-control,c,winforms
来源: https://codeday.me/bug/20191025/1931513.html