webbrowser visual studio software net microsoft internet hkey_current_user featurecontrol feature_browser_emulation feature control com html5 automation standards internet-explorer-9

com - visual - ¿Cómo poner el control WebBrowser en IE9 en estándares?



visual studio 2015 webbrowser control ie version (3)

¿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

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, que muestra mi html, que comienza como:

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

Nota: html5 el modo de estándares opt-in doctype html

Excepto que el documento no está en el modo de estándares ie9; está en el modo de estándares ie8:

Si guardo el html en mi computadora primero:

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

Mi pregunta es cómo actualizar mi función SpawnIEWithSource(String html) para lanzar el navegador al 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: Un ejemplo de código más detallado, menos comprensible o legible, que no ayuda aún más a la pregunta:

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 del ieblog sitios de prueba con el modo navegador frente al modo Doc :

¿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 forma diferente, tal vez por razones de compatibilidad.

MarkSil [MSFT] respondió:

@Thomas: Gracias por plantear esa pregunta. El control WebBrowser determina el modo doc de la misma manera que IE porque contiene la misma plataforma web (por ejemplo, hay un mshtml.dll compartido en todos los servidores IE y WebBrowser Control). El control WebBrowser se configura de manera predeterminada en el modo de navegador de 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 Thomas respondió:

@MarcSil (re: WebBrowser Control)

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 de WebDialog para crear UI, es solo un control WebBrowser en una ventana. Pero eso lleva a 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 totalidad.

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


La "versión" IE9 del control WebBrowser, como la versión IE8, es en realidad varios navegadores en uno. A diferencia de la versión IE8, usted tiene un poco más de control sobre el modo de representación dentro de la página al cambiar el tipo de documento. Por supuesto, para cambiar el modo de 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á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 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


FEATURE_BROWSER_EMULATION no funciona con CoInternetSetFeatureEnabled . La documentación de INTERNETFEATURELIST no se actualiza desde IE7.

Dado que la configuración de características se encuentra en HKEY_CURRENT_USER / SOFTWARE / Microsoft / Internet Explorer / Main / FeatureControl, puede anular el valor de su proceso a través de un enlace API de registro.