Winforms WebBrowser控件-安装IE 11后出现页面呈现错误
安装Internet Explorer 11预览版后,我对Winforms.NET类“WebBrowser”有问题。当我调用我的网页时,它看起来像是禁用javascipt。如果基于Winforms WebBrowser控件-安装IE 11后出现页面呈现错误,winforms,internet-explorer,web,webbrowser-control,internet-explorer-11,Winforms,Internet Explorer,Web,Webbrowser Control,Internet Explorer 11,安装Internet Explorer 11预览版后,我对Winforms.NET类“WebBrowser”有问题。当我调用我的网页时,它看起来像是禁用javascipt。如果基于WebBrowser的应用程序和你的网页在IE10中仍然可以正常工作,那么以下可能就是问题的原因 在一个颇具争议的决定中 这是IE11中UI字符串的外观: navigator.userAgent: Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) lik
WebBrowser
的应用程序和你的网页在IE10中仍然可以正常工作,那么以下可能就是问题的原因
在一个颇具争议的决定中
这是IE11中UI字符串的外观:
navigator.userAgent: Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko
document.documentMode: 11
document.compatMode: CSS1Compat
谢谢,但修补程序不起作用。如何在.NET中轻松设置UrlMkSetSessionOption?@majco333,不知道“热修复”是什么意思。我已经发布了相关的代码,将
GetIEVersion
和Win32
p/invoke定义留给您作为练习来实现。我必须为Win32函数导入.net项目什么?因为我在我的项目中没有看到。感谢我的作品:u函数UrlMkSetSessionOption(ByVal dwOption作为整数,ByVal pBuffer作为字符串,ByVal dwBufferLength作为整数,ByVal dwReserved作为整数)作为整数结束函数我使用了这个用户代理:Mozilla/5.0(windowsnt 6.1)AppleWebKit/537.36(KHTML,像Gecko)Chrome/30.0.1599.101 Safari/537.36 noserio:谢谢!!!
navigator.userAgent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0;)
document.documentMode: 10
document.compatMode: CSS1Compat
static public void ChangeUserAgentForIE11()
{
if (GetIEVersion() <= 10)
return;
var userAgent = new StringBuilder(256);
int length = 0;
Win32.UrlMkGetSessionOption(Win32.URLMON_OPTION_USERAGENT, userAgent, userAgent.Capacity-1, ref length, 0);
// IE10: navigator.userAgent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0)
// IE11: navigator.userAgent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; rv:11.0) like Gecko
var regex = new Regex(@"^\s*(Mozilla/\d+\.\d+\s+\()(Windows\s+.*)like Gecko\s*$", RegexOptions.IgnoreCase); //IE11 regex
var match = regex.Match(userAgent.ToString());
if (match.Success)
{
var newUserAgent = String.Concat(match.Groups[1], "compatible; MSIE 10.0; ", match.Groups[2]);
Win32.UrlMkSetSessionOption(Win32.URLMON_OPTION_USERAGENT, newUserAgent, newUserAgent.Length, 0);
var verifyUserAgent = new StringBuilder(256);
length = 0;
Win32.UrlMkGetSessionOption(Win32.URLMON_OPTION_USERAGENT, verifyUserAgent, verifyUserAgent.Capacity-1, ref length, 0);
if (verifyUserAgent.ToString() != newUserAgent)
throw new ApplicationException("Unable to change WebBrowser User Agent.");
}
}