【问题标题】:Winform webbrowser custom fonts not showingWinform webbrowser自定义字体不显示
【发布时间】:2017-07-28 23:56:58
【问题描述】:

我正在使用 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">

我的字体 is 已经标记为可安装(并且在 IE 中可以正常工作),因此很明显 webbrowser 控件存在一些特定的问题 - 但是花了几个小时试图弄清楚,我'我不知道那可能是什么。

有人知道我在这里缺少什么吗?

谢谢!

【问题讨论】:

    标签: c# winforms fonts webbrowser-control


    【解决方案1】:

    原来这里有两个问题。我终于设法解决了这些问题,所以我会在这里分享问题和他们的解决方案,希望将来可以为其他人节省一些时间。

    问题 #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 策略。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2017-11-06
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2017-12-01
    相关资源
    最近更新 更多