puedo para kb2847882 internet instalar descargar winforms internet-explorer web webbrowser-control internet-explorer-11

winforms - para - kb2847882



Control WebBrowser-error de representación de página después de instalar IE 11 (1)

Si su aplicación basada en WebBrowser y sus páginas web todavía funcionan bien con IE10, es probable que la razón del problema sea la siguiente.

En una decisión bastante controvertida, Microsoft ha cambiado el diseño tradicional de la cadena del agente de usuario de IE (UA) en IE11 .

Así es como se ve la cadena UI en IE11:

navigator.userAgent: Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko document.documentMode: 11 document.compatMode: CSS1Compat

Esto es lo que solía ser en IE10 y versiones anteriores:

navigator.userAgent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0;) document.documentMode: 10 document.compatMode: CSS1Compat

Si bien una página web bien diseñada no debe depender de la cadena UA para detectar las características HTML disponibles, muchas páginas existentes aún lo tienen, y dicho cambio puede haberlas confundido.

Si no tiene control sobre las páginas web que carga y no puede repararlas, una forma de restaurar la cadena UA tradicional es forzar la emulación IE7 con FEATURE_BROWSER_EMULATION para su aplicación basada en WebBrowser . Desafortunadamente, tendrías que ir por tan bajo como IE7. Especificar una versión más alta no restaura el viejo diseño de cadena UA.

Otra forma más flexible pero más compleja de solucionar esto es configurar una cadena de UA personalizada a través de UrlMkSetSessionOption / URLMON_OPTION_USERAGENT WinAPI. Debería recuperar la cadena de UI actual con UrlMkGetSessionOption , analizarlo, agregar las partes faltantes y volver a UrlMkSetSessionOption con UrlMkSetSessionOption . Hágalo en el constructor static de su clase Form , antes de que WebBrowser objeto WebBrowser sea ​​instanciado.

[ACTUALIZAR] El código para cambiar la cadena de agente de usuario:

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."); } }

Tengo un problema con Winforms .NET Class "WebBrowser" después de instalar Internet Explorer 11 Preview. Parece que desactiva javascipt cuando llamo a mi página web.