¿Cómo poner el control WebBrowser en IE9 en las normas?
-
28-09-2019 - |
Pregunta
Estoy utilizando 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: de HTML5 estándares en modo opt-in tipo de documento
html
excepto que el documento no está en modo de IE9 normas; está en el modo estándar de IE8:
Si salvo el html en mi equipo primero:
y luego ver que 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 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;
}
Edit: Una más prolija, menos comprensible ejemplo de código o legible, no hace que ayuda aún más 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
comentarista preguntó sobre la entrada IEBlog sitios de prueba con el modo de navegación frente al modo Doc :
¿Se puede obtener una descripción de cómo se determina el modo de documento cuando el contenido HTML está dentro de una de webcontrol incorporado? Parece ser que el modo de documentos se elige de manera diferente - tal vez por razones de compatibilidad
MarkSil [MSFT] respondió:
@Thomas: Gracias por elevar esa pregunta. El control WebBrowser determina el modo de doc de la misma manera que IE hace, ya que contiene la misma plataforma web (por ejemplo hay una mshtml.dll compartida a través de IE y Control WebBrowser hosts). El control WebBrowser de activación del modo de navegador de vista de compatibilidad, lo que significa que el modo por defecto es doc IE7. Aquí es un blog con más detalle sobre esto: blogs.msdn.com /.../ más-ie8-extensibilidad-improvements.aspx .
A lo que Tomás respondió:
@MarcSil (re: Control WebBrowser)
El problema con el uso de las entradas de registro para seleccionar el modo de documento para WebControl es que se aplica a la aplicación en su conjunto. Escribo plugins para Google SketchUp donde tiene ventanas WebDialog para crear interfaces de usuario - es sólo un control WebBrowser en una ventana. Pero eso conduce a problemas como yo quieren forzar un modo de documentos para mi instancia del control WebBrowser, no para todos los controles WebBrowser de la UB en su conjunto.
Por lo tanto, mi pregunta es:? ¿Cómo controlar el modo de documento por ejemplo, para un control WebBrowser
Solución
¿Usted ha intentado establecer en su html la
<meta http-equiv="X-UA-Compatible" content="IE=9" />
o
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
lo que significa versión más reciente
Otros consejos
La "versión" IE9 del control WebBrowser, al igual que la versión de Internet Explorer 8, es en realidad varios navegadores en uno. A diferencia de la versión de Internet Explorer 8, usted 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 de navegador que tiene que fijar su registro como la respuesta anterior. Esta es 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
Éste es el conjunto completo de códigos:
- 9999 (0x270F) - Internet Explorer 9. Las páginas web se muestran en IE9 Modo de normas, independientemente de la ! DOCTYPE Directiva.
- 9000 (0x2328) - Internet Explorer 9. Las páginas web que contienen basados ??en estándares DOCTYPE directivas se muestran en el modo de IE9.
- 8888 (0x22B8) -Webpages son que aparece en el modo estándar de IE8, independientemente de la directiva! DOCTYPE.
- 8000 (0x1F40) - Las páginas web que contiene basados ??en estándares! DOCTYPE directivas se muestra en el modo IE8.
- 7000 (0x1B58) - Las páginas web que contiene basados ??en estándares! DOCTYPE directivas se muestran en el modo estándar de IE7.
Los documentos completos:
http://msdn.microsoft.com/en-us /library/ee330730%28VS.85%29.aspx#browser_emulation
FEATURE_BROWSER_EMULATION no funciona CoInternetSetFeatureEnabled . La documentación de INTERNETFEATURELIST no se actualiza desde IE7.
Dado que el ajuste de la función es en HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl que pueden sea capaz de anular el valor en su proceso a través de un gancho API de registro.