Comment mettre le contrôle WebBrowser dans IE9 dans les normes?
-
28-09-2019 - |
Question
J'utilise l'automatisation (par exemple COM automatisation) pour afficher du code HTML dans Internet Explorer (9):
ie = CoInternetExplorer.Create;
ie.Navigate2("about:blank");
webDocument = ie.Document;
webDocument.Write(szSourceHTML);
webDocument.Close();
ie.Visible = True;
Internet Explorer apparaît, montrant mon html, qui commence comme:
<!DOCTYPE html>
<HTML>
<HEAD>
...
Remarque: l'opt-in doctype
html
html5 normes en mode
Sauf que le document n'est pas en mode standard IE9; il est en mode standard IE8:
Si je sauvegarde le code html à mon premier ordinateur:
et puis voir html document IE est mis en mode standard:
Ma question est de savoir comment mettre à jour ma fonction SpawnIEWithSource(String html)
pour lancer le navigateur en mode standard?
void SpawnIEWithSource(String html)
{
Variant ie = CoInternetExplorer.Create();
ie.Navigate2("about:blank");
webDocument = ie.Document;
webDocument.Write(html);
webDocument.Close();
ie.Visible = true;
}
Edit: Un plus bavard, moins compréhensible exemple de code ou lisible, qui ne aide plus la question pourrait être:
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();
Mise à jour
demandé à l'ommenter entrée IEBlog Test des sites avec le mode Navigateur vs mode Doc :
Peut-on obtenir une description de la façon dont le mode de document est déterminé lorsque le contenu HTML est dans un webcontrol intégré? Semble être que le mode de documents est choisie différemment - peut-être pour des raisons de compatibilité
MarkSil [MSFT] a répondu:
@Thomas: Merci d'avoir soulevé cette question. Le contrôle WebBrowser détermine le mode de doc de la même manière que IE fait parce qu'il contient la même plate-forme Web (par exemple, il y a une mshtml.dll partagée entre les hôtes et IE WebBrowser Control). Le contrôle WebBrowser fait défaut au mode d'affichage de compatibilité du navigateur, ce qui signifie que le mode doc par défaut est IE7. Voici un blog avec plus de détails à ce sujet: blogs.msdn.com /.../ plus-IE8-improvements.aspx Extensions.
A quoi Thomas a répondu:
@MarcSil (re: WebBrowser Control)
Le problème avec l'utilisation des entrées de registre pour sélectionner le mode de document pour WebControl est qu'il applique à l'application dans son ensemble. J'écrire des plugins pour Google SketchUp où vous avez les fenêtres WebDialog pour créer UIs - il est juste un contrôle WebBrowser dans une fenêtre. Mais cela conduit à des problèmes que je veux forcer un mode de documents pour mon instance du contrôle WebBrowser, pas pour tous les contrôles WebBrowser de SU dans son ensemble.
Alors, ma question est: comment voulez-vous contrôler le mode de documents par exemple pour un contrôle WebBrowser
La solution
Avez-vous essayé paramètre dans votre html le
<meta http-equiv="X-UA-Compatible" content="IE=9" />
ou
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
ce qui signifie dernière version
Autres conseils
La « version » IE9 du contrôle WebBrowser, comme la version IE8, est en fait plusieurs navigateurs dans un. Contrairement à la version IE8, vous disposez d'un peu plus de contrôle sur le mode de rendu dans la page en changeant le type de document. Bien sûr, pour changer le mode de navigateur que vous devez définir votre base de registre comme la réponse précédente. Voici l'emplacement de FEATURE_BROWSER_EMULATION:
HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
contoso.exe = (DWORD) 000090000
Voici l'ensemble complet de codes:
- 9999 (0x270F) - Internet Explorer 9. Pages web sont affichés dans IE9 mode standard, quelle que soit la ! DOCTYPE directive.
- 9000 (0x2328) - Internet Explorer 9. basée sur les standards pages internet contenant DOCTYPE directives sont affichées en mode IE9.
- 8888 (0x22B8) sont -Webpages affiché en mode Standards IE8, quelle que soit la directive DOCTYPE!.
- 8000 (0x1F40) - pages Web contenant fondées sur des normes! directives DOCTYPE sont affichés en mode IE8.
- 7000 (0x1B58) - pages Web contenant fondées sur des normes! directives DOCTYPE sont affichés en mode IE7 normes.
Les documents complets:
http://msdn.microsoft.com/en-us /library/ee330730%28VS.85%29.aspx#browser_emulation
FEATURE_BROWSER_EMULATION ne fonctionne pas avec CoInternetSetFeatureEnabled . La documentation de INTERNETFEATURELIST est pas mis à jour depuis IE7.
Depuis la création de la fonctionnalité est en cours HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl vous peut être en mesure de remplacer la valeur dans votre processus au moyen d'un crochet de l'API de registre.