¿Cómo poner el control WebBrowser en IE9 en los estándares?

6 minutos de lectura

¿Como poner el control WebBrowser en IE9 en los estandares
Ian Boyd

Estoy usando la automatización (es decir, la automatización COM) para mostrar algo de HTML en Internet Explorer (9):

ie = CoInternetExplorer.Create;
ie.Navigate2("about:blank");
webDocument = ie.Document;
webDocument.Write(szSourceHTML);
webDocument.Close();
ie.Visible = True;

Aparece Internet Explorer, mostrando mi html, que comienza como:

<!DOCTYPE html>
<HTML>
<HEAD>
   ...

Nota: el tipo de documento de suscripción en modo estándar de html5 html

Excepto que el documento no está en modo estándar ie9; está en modo estándar ie8:
texto alternativo


Si guardo el html en mi computadora primero:

texto alternativo

y luego ver que documento html, IE se pone en modo estándar:

texto alternativo

Mi pregunta es cómo actualizar mi SpawnIEWithSource(String html) función para poner el navegador en modo estándar?

void SpawnIEWithSource(String html)
{
   Variant ie = CoInternetExplorer.Create();
   ie.Navigate2("about:blank");
   webDocument = ie.Document;
   webDocument.Write(html);
   webDocument.Close();
   ie.Visible = true;
}

Editar: una muestra de código más detallada, menos comprensible o legible, que no ayuda más a la pregunta podría ser:

IWebBrowser2 ie;
CoCreateInstance(CLASS_InternetExplorer, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_WebBrowser2, ie);
ie.AddRef();
ie.Navigate2("about:blank");

IHtmlDocument doc;
dispDoc = ie.Document;
dispDoc.AddRef();
dispDoc.QueryInterface(IHTMLDocument2, doc);
dispDoc.Release()
doc.Write(html); 
doc.Close();
doc.Release();
ie.Visible = true;
ie.Release();

Actualizar

El comentarista preguntó en la entrada de ieblog Sitios de prueba con el modo de navegador frente al modo de documento:

¿Podemos obtener una descripción de cómo se determina el modo de documento cuando el contenido HTML está dentro de un control web incrustado? Parece ser que el modo de documento se elige de manera diferente, ¿tal vez por razones de compatibilidad?

marcasil [MSFT] respondió:

@Thomas: Gracias por plantear esa pregunta. WebBrowser Control determina el modo doc de la misma manera que IE porque contiene la misma plataforma web (por ejemplo, hay un mshtml.dll compartido entre los hosts de IE y WebBrowser Control). El control WebBrowser utiliza de forma predeterminada el modo de navegador Vista de compatibilidad, lo que significa que el modo de documento predeterminado es IE7. Aquí hay una publicación de blog con más detalles sobre esto: blogs.msdn.com/…/more-ie8-extensibility-improvements.aspx.

A lo que Tomás respondió:

@MarcSil (re: Control del navegador web)

El problema con el uso de entradas de registro para seleccionar el modo de documento para WebControl es que se aplica a la aplicación como un todo. Escribo complementos para Google SketchUp donde tiene ventanas WebDialog para crear interfaces de usuario: es solo un control WebBrowser en una ventana. Pero eso genera problemas, ya que quiero forzar un modo de documento para mi instancia del control WebBrowser, no para todos los controles WebBrowser de SU en su conjunto.

Entonces, mi pregunta es: ¿cómo controla el modo de documento por instancia para un control WebBrowser?

  • no estoy seguro si ha revisado mi respuesta, ya que parece estar de acuerdo con lo que publicó en su actualización.

    – Gabriele Petrioli

    4 de noviembre de 2010 a las 18:08

  • No funcionó, respondió a su respuesta directamente.

    – Ian Boyd

    4 de noviembre de 2010 a las 20:33

¿Has intentado configurar en tu html el

<meta http-equiv="X-UA-Compatible" content="IE=9" />

o

<meta http-equiv="X-UA-Compatible" content="IE=edge" />

lo que significa la última versión

  • Atrás, lo siento. intenté agregar <META http-equiv="X-UA-Compatible" content="IE=edge" /> y el modo de documento sigue siendo IE8. 🙁

    – Ian Boyd

    4 de noviembre de 2010 a las 20:32

  • esta respuesta lo hace trabajo, pero con una nota importante: El X-UA-Compatible La directiva debe colocarse en el HEAD antes de todos los demás elementos (excepto TITLE u otro META). Así que es más fácil simplemente colocarlo primero. Si se coloca, por ejemplo, después STYLEentonces será ignorado.

    – Ian Boyd

    21 de marzo de 2011 a las 15:46

  • ¿borde renderizará en IE8 si mi navegador es IE8?

    – trepoides

    28 de marzo de 2012 a las 20:13

  • @climboid, sí IE=edge significa la última versión compatible con el navegador IE instalado. Si el suyo es IE8, se renderizará en IE8. (tenga en cuenta que esto no funciona para sitios de intranet)

    – Gabriele Petrioli

    28 de marzo de 2012 a las 20:15

  • Esto no funciona para el control WebBrowser. No estoy seguro de lo que estos tipos han estado soplando. Esto es lo que ve el servidor en una página con esos metadatos en un navegador IE11, usando Request.Browser: Type = InternetExplorer11 Name = InternetExplorer Version = 11.0 Major Version = 11 Minor Version = 0 Esto es lo que obtengo de un WebControl, en la misma página, desde la misma máquina: Type = IE7 Name = IE Version = 7.0 Major Version = 7 Minor Version = 0

    – MoonStom

    7 oct 2015 a las 15:16

La “versión” IE9 del control WebBrowser, al igual que la versión IE8, es en realidad varios navegadores en uno. A diferencia de la versión IE8, tiene un poco más de control sobre el modo de representación dentro de la página cambiando el tipo de documento. Por supuesto, para cambiar el modo del navegador, debe configurar su registro como la respuesta anterior. Aquí está la ubicación de FEATURE_BROWSER_EMULATION:

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
     SOFTWARE
          Microsoft
               Internet Explorer
                    Main
                         FeatureControl
                              FEATURE_BROWSER_EMULATION
                                   contoso.exe = (DWORD) 000090000

Aquí está el conjunto completo de códigos:

  • 9999 (0x270F) – Internet Explorer 9. Las páginas web se muestran en el modo estándar de 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 estándar de 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.
  • 7000 (0x1B58) – Las páginas web que contienen directivas !DOCTYPE basadas en estándares se muestran en el modo de estándares de IE7.

Los documentos completos:

http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

  • Eso es todo lo que tengo. Pero luego surge la pregunta, ¿qué sucede si configuro el valor en 9999 pero el cliente es IE8 (es decir, en XP donde la versión máxima de IE es 8)? ¿Fuerza el modo estándar de IE8 o nada en absoluto?

    – Sgali

    10 de junio de 2013 a las 12:25

¿Como poner el control WebBrowser en IE9 en los estandares
Sheng Jiang 蒋晟

FEATURE_BROWSER_EMULATION no funciona con CoInternetSetFeatureEnabled. la documentacion de LISTA DE CARACTERÍSTICAS DE INTERNET no se actualiza desde IE7.

Dado que la configuración de la función se encuentra en HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl, mayo ser capaz de anular el valor en su proceso a través de un enlace API de registro.

  • No me he puesto a probar tu idea. Pero voté a favor porque nunca supe que había una característica como GetOverrideKeyPath.

    – Ian Boyd

    15 de noviembre de 2010 a las 19:32

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad