La "versión" de IE9 del control WebBrowser, como la versión de IE8, es en realidad varios navegadores en uno. A diferencia de la versión IE8, tienes un poco más de control sobre el modo de renderizado dentro de la página cambiando el tipo de documento. Por supuesto, para cambiar el modo de navegador, debe configurar su registro como la respuesta anterior. Aquí hay un fragmento de archivo reg para FEATURE_BROWSER_EMULATION:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"contoso.exe"=dword:00002328
Aquí está el conjunto completo de códigos:
- 9999 (0x270F) : Internet Explorer 9. Las páginas web se muestran en el modo de estándares IE9, independientemente de la directiva! DOCTYPE.
- 9000 (0x2328) - Internet Explorer 9. Las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en modo IE9.
- 8888 (0x22B8) -Las páginas web se muestran en el modo de estándares IE8, independientemente de la directiva! DOCTYPE.
- 8000 (0x1F40) : las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en el modo IE8.
- 7000 (0x1B58) : las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en el modo de estándares IE7.
Los documentos completos:
http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
y 64 bitsHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
.El control WebBrowser usará cualquier versión de IE que haya instalado, pero por razones de compatibilidad, procesará las páginas en el modo estándar IE7 de forma predeterminada.
Si desea aprovechar las nuevas funciones de IE9, debe agregar la metaetiqueta
<meta http-equiv="X-UA-Compatible" content="IE=9" >
dentro de la<head>
etiqueta de su página HTML.Sin embargo, esta metaetiqueta debe agregarse antes de cualquier enlace a CSS, archivos JavaScript, etc. que también estén en su
<head>
para que funcione correctamente (solo otras<meta>
etiquetas o la<title>
etiqueta pueden ir antes).Una alternativa es agregar una entrada de registro a:
Y allí agregue 'myApplicationName.exe' con el valor '9000' para forzar al control WebBrowser a mostrar páginas en modo IE9. Aunque hay otros valores que también puede usar , tenga en cuenta que estos documentos no son del todo precisos, ya que no parece posible obtener una página para representar en el modo IE 8, independientemente del valor que use.
Agregar la clave de registro a la misma ruta en HKCU en lugar de HKLM también funcionará; esto es útil, ya que escribir en HKLM requiere privilegios de administrador, mientras que HKCU no.
fuente
Gracias a Dios encontré esto. Lo siguiente es extremadamente importante:
<meta http-equiv="X-UA-Compatible" content="IE=9" >
Sin esto, ninguno de los informes que había estado generando funcionaría después de la instalación de IE9 a pesar de haber funcionado muy bien en IE8. Aparecerían correctamente en un control de navegador web, pero faltarían letras, habría espacios en blanco, etc., cuando llamé a .Print (). Eran solo HTML básico que debería poder procesarse incluso en Mosaic. je No estoy seguro de por qué el modo de compatibilidad IE7 se estaba volviendo loco. En particular, podría .Print () la misma página 5 veces y que le falten letras diferentes cada vez. Incluso se trasladaría a la salida PDF, por lo que definitivamente es el navegador.
fuente
Una nota sobre Windows de 64 bits que parece hacer tropezar a algunas personas. Si su aplicación se ejecuta en Windows de 64 bits, es probable que deba configurar el DWORD en [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION] en su lugar.
fuente
Solo para estar completo ...
Para sistemas operativos de 32 bits, debe agregar una entrada de registro a:
*******O*******
Para sistemas operativos de 64 bits, debe agregar una entrada de registro a:
Esta entrada debe ser a
DWORD
, y el nombre es el nombre de su ejecutable, que aloja el control del navegador web; es decir:myappname.exe (NO USE "Contoso.exe" como en la página web de MSDN ... es solo un nombre de marcador de posición)
Luego dale un
DWORD
valor, de acuerdo con la tabla en:http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation
Cambié a 11001 decimal o 0x2AF9 hex --- (IE 11 EMULATION) ya que ese no es el valor PREDETERMINADO (si tiene IE 11 instalado, o cualquier versión).
Ese artículo de MSDN contiene notas sobre varios otros cambios en el Registro que afectan el comportamiento del navegador web Internet Explorer.
fuente
Sé que este hilo es antiguo y ya hay respuestas completas.
En caso de que no sepa esto:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
No tiene que codificar el número de versión de IE como
<meta http-equiv="X-UA-Compatible" content="IE=9" >
fuente
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
en el encabezado, el navegador web se cargará en el último modo IE. ¿Por qué hay más de 90 votos a favor para la respuesta de mikel? porque su solución funciona. No es necesario cambiar el registro si puede cambiar la página web.Estoy totalmente de acuerdo con la solución proporcionada, pero creo que una pequeña aclaración es importante, creo que podría ser necesaria.
Para cada proceso (lea también: vshost.exe, yourWinformApplication.exe.svchost, o el nombre de su application.exe) que necesitará agregar un DWORD con el valor proporcionado, en mi caso dejo 9000 (en decimal) en la aplicación nombre y ejecutar un script sin problemas y sin errores.
el error más común es creer que es necesario agregar "contoso.exe" TAL CUAL y pensar que todo funciona.
fuente
Sí, el control WebBrowser utiliza cualquier versión de IE que haya instalado. Esto significa, por supuesto, que si ejecuta su aplicación en una máquina con IE 8, las funciones de IE 9 de las que depende no estarán disponibles.
fuente
¡Llegué a esta solución y no funcionó para mí! Como estaba usando 64 bits, tuve que reemplazar el registro:
En lugar del del que todos hablan:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
fuente
Me gustó el código (C #) a continuación, que establece la configuración del registro para su aplicación. No estoy seguro de si lo cortará después de la instalación, aunque si se requieren permisos. Para mí, resolvió un problema con WebSocket que no estaba disponible dentro de un control WebBrowser en WPF.
Llamada Ajax del navegador web C #
fuente
Tuve el mismo problema y las respuestas del registro aquí no funcionaron.
Tenía un control de navegador en la nueva versión de mi programa que funcionó bien en XP, falló en Windows 7 (64 bits). La versión anterior funcionaba tanto en XP como en Windows 7.
La página web que se muestra en el navegador utiliza un complemento extraño para mostrar mapas SVG antiguos (creo que es un subprograma de Java).
Resulta que el problema está relacionado con la protección DEP en Windows 7.
Las versiones anteriores de dotnet 2 no establecían el indicador de DEP requerido en el exe, pero a partir de dotnet 2, SP 1 en adelante lo hizo (sí, el comportamiento de compilación y, por lo tanto, el comportamiento en tiempo de ejecución del exe cambió según la máquina en la que compiló, bueno. ..).
Está documentado en un blog de MSDN NXCOMPAT y el compilador de C # . Para citar: esto sin duda sorprenderá a algunos desarrolladores ... descargue un paquete de servicio de marco, vuelva a compilar, ejecute su aplicación y ahora obtendrá excepciones IP_ON_HEAP.
Agregar lo siguiente a la compilación de la publicación en Visual Studio, desactiva DEP para el exe y todo funciona como se esperaba:
all "$(DevEnvDir)..\tools\vsvars32.bat" editbin.exe /NXCOMPAT:NO "$(TargetPath)"
/headers
mostrará la configuración DEP en un exe.fuente
Con respecto a la respuesta aceptada de Whitehawk. Solo estoy tratando de agregar un poco de experiencia práctica. Solo estaba tratando de agregar comentarios, pero SO se queja de que es demasiado largo.
Básicamente, sin IE 9 instalado, el interruptor de registro FEATURE_BROWSER_EMULATION no funcionará en absoluto.
Por ejemplo, mi propia experiencia hoy estaba tratando de hacer que .net webcontrol funcionara con el modo IE10 porque un html que estoy tratando de renderizar no funciona con .netControl en VS2012, y ni siquiera funciona cuando cargo el html en IE8 directamente, aún css no se procesará correctamente (incluso después de que diga permitir contenido bloqueado). Pero he probado el mismo html ok con IE10 en la máquina win 8 de un amigo. Es por eso que estoy tratando de configurar .net webControl en el modo IE 10 pero sigo fallando ...
Ahora pensé que esto es porque mi máquina win 7 solo tiene IE8 instalado, así que independientemente del valor que establezca en el interruptor FEATURE_BROWSER_EMULATION (valor para IE9, IE10 IE11), ¡simplemente no funcionará EN ABSOLUTO!
Luego descargué e instalé IE 10 en mi máquina win 7. Aún así, no funcionará, luego agregué FEATURE_BROWSER_EMULATION, ¡comenzó a funcionar!
También noté que independientemente del valor que establezca, incluso lo configuré en el valor 0 de forma predeterminada, el webControl todavía está usando el modo IE 10, que todavía me funciona.
Entonces, para resumir, si tiene IE X instalado pero desea que su .Net webControl funcione bajo IE (X + N) N> 0 modo, DOS cosas que debe hacer:
Vaya al sitio web de MS y descargue e instale IE (X + N) en su máquina, deberá reiniciar después de la instalación.
aplique la respuesta de whitehawk.
Básicamente: para controlar el valor de esta función utilizando el registro, agregue el nombre de su archivo ejecutable a la siguiente configuración y establezca el valor para que coincida con la configuración deseada.
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BROWSER_EMULATION contoso.exe = (DWORD) 00009000
Windows Internet Explorer 8 y posterior. La función FEATURE_BROWSER_EMULATION define el modo de emulación predeterminado para Internet Explorer y admite los siguientes valores.
Descripción del valor
11001 (0x2AF9 Internet Explorer 11. Las páginas web se muestran en el modo de borde IE11, independientemente de la directiva! DOCTYPE.
11000 (0x2AF8) IE11. Las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en el modo de borde IE11. Valor predeterminado para IE11.
10001 (0x2711) Internet Explorer 10. Las páginas web se muestran en el modo de estándares IE10, independientemente de la directiva! DOCTYPE.
10000 (0x02710) Internet Explorer 10. Las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en el modo de estándares IE10. Valor predeterminado para Internet Explorer 10.
9999 (0x270F) Windows Internet Explorer 9. Las páginas web se muestran en el modo Estándar IE9, independientemente de la directiva! DOCTYPE.
9000 (0x2328) Internet Explorer 9. Las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en modo IE9. Valor predeterminado para Internet Explorer 9.
Importante En Internet Explorer 10, las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en el modo de estándares IE10.
8888 (0x22B8) Las páginas web se muestran en el modo de estándares IE8, independientemente de la directiva! DOCTYPE.
8000 (0x1F40) Las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en modo IE8. Valor predeterminado para Internet Explorer 8 Importante En Internet Explorer 10, las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en el modo de estándares IE10.
7000 (0x1B58) Las páginas web que contienen directivas! DOCTYPE basadas en estándares se muestran en el modo de estándares IE7. Valor predeterminado para aplicaciones que alojan WebBrowser Control.
Referencia completa aquí
fuente
without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.
- esto está mal. Solo tengo IE8 instalado y puedo usar perfectamente el interruptor para poner el navegador web en diferentes modos de renderizado.