C# WebBrowser控件中的Google字体仅在“是”时显示;“帮助”;从外面

C# WebBrowser控件中的Google字体仅在“是”时显示;“帮助”;从外面,c#,winforms,webbrowser-control,webfonts,google-webfonts,C#,Winforms,Webbrowser Control,Webfonts,Google Webfonts,目前,我在.NET2.0WinForms应用程序中看到一个奇怪的行为 托管一个从其内置的web服务器()中提取数据的应用程序,一切正常,直到实现 步骤: 在Windows 7下,会发生以下行为: 1.)启动应用程序。该页面不显示Google Web字体: 2.)在Internet Explorer的独立实例中打开内置web服务器的URL: 3.)返回C#应用程序,点击F5: 现在,字体在我的应用程序中也是可见的 行为: 看起来独立IE做了一些额外的事情,而我的应用程序中的托管IE是不允许做

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

托管一个从其内置的web服务器()中提取数据的应用程序,一切正常,直到实现

步骤:

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

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

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

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

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

行为:

看起来独立IE做了一些额外的事情,而我的应用程序中的托管IE是不允许做的

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

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

我的假设:

我猜这与IE在其区域设置缓存中“安装”web字体所需的权限有关。我刚刚在我的请求头中添加了一个
访问控制允许源代码:
,但这似乎没有任何改进

我的问题:

你有没有关于如何让谷歌网页字体在我的场景中工作的提示,而不需要启动独立的IE

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

基于,我更改了
WebBrowser
控件的用户代理,该操作成功。现在,我的WinForms应用程序中有了web字体和托管浏览器

这张照片看起来像:

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的web服务器下载CSS文件和WOFF/EOT文件,并将它们本地放置在您的web服务器上。之后,您需要更改Google的CSS文件以指向您的本地WOFF文件

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


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

您看到的差异可能是因为托管的web浏览器控件在怪癖模式下运行。看看它是否有任何效果。

很想知道你是否有任何进展,因为我也有同样的问题!.net web浏览器控件的随机和未记录的行为是一个完全的痛苦。@AlexWarren我最近玩了一点(以及它们的.net绑定)。也许这也是你的一个选择?谢谢Uwe,我以前没见过Chromium Embedded,但它看起来是个不错的选择。谢谢,但我已经有了,所以quirks模式关闭了-但它仍然不会加载外部webfonts。如果你认为它与web浏览器控制权限有关,那么当你以管理员身份运行应用程序时,是否也会发生这种情况?