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: text alt


Si je sauvegarde le code html à mon premier ordinateur:

text alt

et puis voir html document IE est mis en mode standard:

text alt

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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top