Winform webbrowser 自定义字体不显示
Winform webbrowser custom fonts not showing
我正在使用 C# WebBrowser 控件 (Winforms) 并通过 .DocumentText 属性.
将标记传递给它
该文档链接到某些使用 @font-face
规则的 css,该规则在 运行 本地(和来自服务器)时有效,但 不 当被浏览器控件使用时。
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 期
浏览器控件显示安全警告(由于 .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 策略。
我正在使用 C# WebBrowser 控件 (Winforms) 并通过 .DocumentText 属性.
将标记传递给它该文档链接到某些使用 @font-face
规则的 css,该规则在 运行 本地(和来自服务器)时有效,但 不 当被浏览器控件使用时。
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 期
浏览器控件显示安全警告(由于 .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 策略。