¿El control del navegador web de IE9 admitirá todas las funciones de IE9, incluido SVG?

84

Recientemente actualicé a IE9-beta. Ahora, en mi aplicación WinForm .Net (3.5) quiero usarWebBrowser control.

Entonces mi pregunta es, si el WebBrowser control exhibirá todas las propiedades y funciones de IE9?

Mi preocupación es que quiero renderizar algunos gráficos SVG en él.

Omkar
fuente

Respuestas:

82

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

Halcón Blanco
fuente
8
Con IE 9 instalado, no parece posible obtener una página para renderizar en modo IE 8. Establecer el valor en 7000 lo pone en modo IE 7 y 8000/8888/9000/9999 lo pone en modo IE 9. Si se trata de algún tipo de error o si es intencional, no lo sé.
mikel
2
Tuve que agregar la clave tanto a current_user como a local_machine antes de que comenzara a funcionar para mí. Pero tuvo éxito después.
Sarah Bailey
Esta publicación de blog, weblog.west-wind.com/posts/2012/feb/15/… menciona que la entrada del Registro variará dependiendo de si es Windows de 32 o 64 bits. 32 bits HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATIONy 64 bits HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.
Richard Chambers
129

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:

HKLM> SOFTWARE> Microsoft> Internet Explorer> Principal> FeatureControl> FEATURE_BROWSER_EMULATION

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.

mikel
fuente
2
Los diferentes valores para la parte de contenido se pueden encontrar aquí: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
KB
Si esta configuración pudiera almacenarse en un archivo CSS, sería más feliz. Ahora tengo que revisar muchos documentos o ¿existe una función de búsqueda y reemplazo de varias líneas en Visual Studio?
KB
2
Probé la metaetiqueta pero no funcionó. Recibía un mensaje de error que decía "HTML1115: etiqueta META compatible con X-UA ('IE = 9 ′) ignorada porque el modo de documento ya está finalizado", lo que me lleva a la página web evolpin.wordpress.com/2011/02/ 25 /… . La solución fue entonces asegurarse de que la metaetiqueta fuera el primer elemento dentro del bloque <head>.
Steg
21
Tenga cuidado, si está ejecutando aplicaciones de 32 bits (que llaman al MSIE de 32 bits) en un Windows de 64 bits, la entrada del registro debe agregarse a HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION en lugar.
igordc
1
Estaba renderizando html a través de xsl / xslt y el regedit no funcionó por alguna razón ... El meta hizo el truco. ¡Gracias!
MazarD
25

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.

Geoff
fuente
17

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.

jtk
fuente
16

Solo para estar completo ...

Para sistemas operativos de 32 bits, debe agregar una entrada de registro a:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

*******O*******

Para sistemas operativos de 64 bits, debe agregar una entrada de registro a:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

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 DWORDvalor, 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.

usuario3175394
fuente
1
La parte DWORD es muy importante. QWORD no funcionará y uno puede cometer ese error fácilmente.
pvieira
Yo agregaría que, cuando esté depurando bajo VS, también debe agregar una entrada para myappname.vshost.exe. Por otro lado, sospecho que simplemente lanzar la aplicación fuera del depurador y luego en el depurador también funcionaría. Creo que funcionó una vez para mí; pero no estoy 100% seguro.
Papa Smurf
1
Debido a mi configuración de IE11, necesitaba abrir IE11 y agregar la URL de destino a mis sitios de confianza. Sin esto, aunque mi registro estuviera configurado correctamente, los scripts de la página no se ejecutarían.
Tony
15

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" >

Tyler Long
fuente
Esto no está relacionado con el problema: el control WebBrowser solo se carga en el modo IE7 a menos que se anule con una configuración de registro para su programa en particular.
Christian
4
@Christian ¿Estás seguro? Por lo que puedo decir, si la página web contiene <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.
Tyler Long
Soy 100% positivo, sin embargo, creo que también depende de la ubicación del sitio web. He estado cargando contenido local y la única forma en que la versión cambiaría es a través del registro. Créame, descartaría la solución de registro por cualquier otra cosa que funcione, pero nada más parece funcionar.
Christian
ie = edge funcionó para mí, sin que yo tocara el registro. ¡Gracias!
Yisroel M. Olewski
@Christian, esto está relacionado con la pregunta: la solución funciona bien.
MarzSocks
6

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.

Alfred Severo
fuente
3

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.

Josh
fuente
2
Vuelve a leer mi respuesta. El voto negativo fue injustificado. Dije que si intenta usar las características de IE9 y luego las implementa en una máquina sin IE9, esas características no funcionarán. La configuración del registro de compatibilidad con versiones anteriores no cambiará ese hecho.
Josh
16
Tu primera oración es evidentemente falsa. Tu segunda oración, como mínimo, es obvia y vaga. Por cierto, gracias por la retribución en contra. Muy maduro.
whitehawk
3
El control WebBrowser utiliza cualquier versión de IE instalada; sin embargo, es posible que el script de detección no se dé cuenta. Prueba este [sitio ( whatismybrowser.com/)][1] . Sé que otros sitios me dieron información incorrecta, pero este sitio identificó correctamente el navegador como la versión de IE que estaba instalada en mi máquina. [1]: whatismybrowser.com
cjbarth
3

¡Llegué a esta solución y no funcionó para mí! Como estaba usando 64 bits, tuve que reemplazar el registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

En lugar del del que todos hablan:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
Tono Nam
fuente
1

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 #

Dirk Bester
fuente
1

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)"
Dave Glassborow
fuente
-3

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:

  1. 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.

  2. 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í

Gob00st
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.
GSerg
Probé IE8 instalado tratando de obtener el modo IE10, ¡no funcionará en absoluto! Intenté de nuevo, no funcionó
Gob00st