我正在使用嵌入在C#WPF .NET4应用程序中的webbrowser控件.每当我手动按下表单中的按钮时,浏览器就会挂起"正在处理您的请求"消息并且没有任何反应.如果我在完整的IE浏览器中执行相同操作,则会正常处理页面以生成结果.我错过了什么?谢谢按钮背后的代码如下
<a onclick="startSearch();" href="javascript:void(-1);" name="btnNext" class="btn floatLe noClear btnSubmit btnRight">
<span>Continue</span>
</a>
Run Code Online (Sandbox Code Playgroud) 目前,我在.NET 2.0 WinForms应用程序中看到了一个奇怪的行为.
托管从其自己的应用程序内置的Web服务器(这个)中提取数据的WebBrowser控件,一切正常,直到它涉及到Google Web Fonts.
脚步:
在Windows 7下,出现以下行为:
1.)启动应用程序.该页面并没有显示谷歌网页字体:

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

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

现在,字体在我的应用程序中也可见.
行为:
似乎独立的IE做了额外的事情,我的应用程序中的托管IE不允许这样做.
一旦在独立IE中打开了URL,我就可以关闭我的应用程序和IE,然后重启我的应用程序并仍然获得正确的行为.
清除IE数据(缓存,cookie等)时,需要再次执行步骤1-3以将Google Web Font添加到托管Web浏览器中.
我的假设:
我猜这与IE似乎需要在其语言环境缓存中"安装"Web字体的权限有关.我刚刚Access-Control-Allow-Origin:*在我的请求标题中添加了一个,但这似乎没有改进任何东西.
我的问题:
您是否有任何关于如何在我的场景中使用Google Web Fonts的提示,而无需启动独立的IE?
更新2013-08-22 - 解决方案:
基于Adam的建议,我更改了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);
}
Run Code Online (Sandbox Code Playgroud)
使用那些P/Invoke辅助函数:
[DllImport(@"urlmon.dll", CharSet = CharSet.Ansi)]
private …Run Code Online (Sandbox Code Playgroud)