gpt4 book ai didi

c# - WebBrowser 控件中的 Google 字体仅在外部为 "helped"时显示

转载 作者:太空狗 更新时间:2023-10-29 23:40:32 26 4
gpt4 key购买 nike

目前,我在 .NET 2.0 WinForms 应用程序中看到一个奇怪的行为。

主持 WebBrowser control从它自己的应用程序内置 Web 服务器 ( this one ) 中提取数据,一切正常,直到出现 Google Web Fonts。 .

步骤:

在 Windows 7 下,会发生以下行为:

1.) 启动应用程序。该页面显示 Google 网络字体:

enter image description here

2.) 在独立的 Internet Explorer 实例中打开内置 Web 服务器的 URL:

enter image description here

3.) 返回 C# 应用程序,按 F5:

enter image description here

现在,字体在我的应用程序中也可见。

行为:

似乎独立的 IE 做了额外的事情,我的应用程序中的托管 IE 不允许做。

在独立 IE 中打开 URL 后,我可以同时关闭我的应用程序和 IE,然后重新启动我的应用程序,仍然会得到正确的行为。

清除 IE 数据(缓存、cookie 等)时,需要再次执行步骤 1-3 才能将 Google Web 字体导入托管的网络浏览器。

我的假设:

我猜测这与 IE 似乎需要在其语言环境缓存中“安装”网络字体的权限有关。我刚刚在我的请求 header 中添加了一个 Access-Control-Allow-Origin:*,但这似乎没有任何改进。

我的问题:

关于如何让 Google Web Fonts 在我的场景中工作,而不需要启动独立的 IE,你有什么提示吗?

2013-08-22 更新 - 解决方案:

基于 Adam's suggestion ,我更改了 WebBrowser 控件的用户代理,这成功了。现在,我在带有托管浏览器的 WinForms 应用程序中确实拥有了网络字体。

code看起来像:

public void ChangeUserAgent()
{
// https://stackoverflow.com/a/12648705/107625
const string ua = @"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";

// https://stackoverflow.com/q/937573/107625
UrlMkSetSessionOption(UrlmonOptionUseragent, ua, ua.Length, 0);
}

使用那些 P/Invoke 辅助函数:

[DllImport(@"urlmon.dll", CharSet = CharSet.Ansi)]
private static extern int UrlMkSetSessionOption(
int dwOption,
string pBuffer,
int dwBufferLength,
int dwReserved);

private const int UrlmonOptionUseragent = 0x10000001;

最佳答案

您是否尝试过从您的网络服务器而不是从 Google 的服务器下载字体并运行它们?您应该能够从 Google 的网络服务器下载 CSS 文件和 WOFF/EOT 文件,并将它们放在您的本地网络服务器上。之后,您需要更改 Google 的 CSS 文件以指向您本地的 WOFF 文件。

我知道这并不能真正解决 WebBrowser 控件的奇怪行为,但它可以作为一种变通方法。

编辑:CSS 似乎是根据浏览器动态生成的。我为 Chrome 获得的 CSS 与我为 IE 获得的不同。不过,这可能仍然适用于您,因为它似乎是通过 WebBrowser 控件在受控环境中运行,因此它应该始终是 IE。

关于c# - WebBrowser 控件中的 Google 字体仅在外部为 "helped"时显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11203784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com