Comment faire pour mettre le contrôle WebBrowser dans IE9 dans les normes?
je suis l'aide de l'automation (c'est à dire d'automatisation COM) pour afficher le 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 s'affiche, montrant mon html, qui commence par:
<!DOCTYPE html>
<HTML>
<HEAD>
...
Remarque: les normes html5 en mode opt-in doctype
html
Sauf que le document n'est pas dans les normes ie9 mode; c'est dans ie8 normes de la mode:
Si je enregistrer le code html de mon premier ordinateur:
et puis vue que document html, c'est à dire est mis en mode standard:
Ma question est comment mettre à jour mon SpawnIEWithSource(String html)
fonction 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 détaillé, moins compréhensible ou un code lisible de l'échantillon, qui n'aide pas davantage 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
Auteur a demandé à la ieblog entrée Les tests de sites avec le Navigateur en Mode vs Doc Mode:
Pouvons-nous obtenir une description de la façon dont le mode de document est déterminé lorsque le contenu HTML est incorporé à l'intérieur d'un webcontrol? Semble que le mode de document est choisie de façon différente - peut-être pour des raisons de compatibilité?
MarkSil [MSFT] a répondu:
@Thomas: Merci pour soulever cette question. Le Contrôle WebBrowser détermine la doc de la mode de la même façon que IE n', car il contient la même plate-forme web (par exemple, il est partagé mshtml.dll à travers IE et Contrôle WebBrowser hôtes). Le Contrôle WebBrowser ne par défaut pour le mode de Compatibilité en mode navigateur, ce qui signifie que par défaut, la doc est en mode IE7. Voici un blog avec plus de détails sur ce: blogs.msdn.com/.../more-ie8-extensibility-improvements.aspx.
À laquelle Thomas a répondu:
@MarcSil (re: Contrôle WebBrowser)
Le problème avec les entrées de registre pour sélectionner le mode de document pour WebControl, c'est qu'il s'applique à l'ensemble de la demande. - Je écrire un plugin pour Google SketchUp où vous avez WebDialog windows pour créer de l'Isu - c'est juste un contrôle WebBrowser dans une fenêtre. Mais cela conduit à des problèmes que je veux forcer un mode de document pour mon exemple du contrôle WebBrowser, pas pour tous de la LIGUE du contrôle WebBrowser dans son ensemble.
Donc, ma question est: comment contrôler le mode de document par exemple pour un contrôle WebBrowser?
- vous ne savez pas si vous avez vérifié ma réponse, comme il semble d'accord avec ce que vous avez publié dans votre mise à jour..
- Ne fonctionne pas, a répondu à votre réponse directement.
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé de réglage dans le html, le
ou
qui signifie la dernière version
<META http-equiv="X-UA-Compatible" content="IE=edge" />
et le mode de document est toujours IE8. 🙁X-UA-Compatible
directive doit être placé dans leHEAD
avant tous les autres éléments (saufTITLE
ou d'autresMETA
). Il est donc plus facile juste pour placer en premier. Si elle est placée, par exemple, aprèsSTYLE
, alors il sera ignoré.IE=edge
signifie la dernière version prise en charge par la installé le navigateur IE. Si le vôtre est IE8 alors qu'il s'affiche dans IE8. (gardez à l'esprit que cela ne fonctionne pas pour les sites intranet)Request.Browser
:Type = InternetExplorer11 Name = InternetExplorer Version = 11.0 Major Version = 11 Minor Version = 0
Voici ce que je l'obtenir à partir d'un WebControl, dans la même page, à partir de la même machine:Type = IE7 Name = IE Version = 7.0 Major Version = 7 Minor Version = 0
IE9 "version" du contrôle WebBrowser, à l'instar de la version IE8, est en réalité plusieurs navigateurs dans un. Contrairement à la version IE8, vous avez un peu plus de contrôle sur le mode de rendu à l'intérieur de la page en modifiant le doctype. Bien sûr, pour changer le mode du navigateur, vous devez définir votre base de registre comme la précédente réponse. Voici l'emplacement de FEATURE_BROWSER_EMULATION:
Ici est l'ensemble des codes:
Les pages web sont affichées dans IE9
Normes de la mode, quel que soit le
!DOCTYPE directive.
les directives sont affichés dans IE9 mode.
affiché dans IE8 Normes de la mode,
quel que soit le !DOCTYPE directive.
basé sur les normes !DOCTYPE directives
sont affichés dans IE8 mode.
basé sur les normes !DOCTYPE directives
sont affichés dans IE7 en mode standard.
Le plein de docs:
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 n'est pas mis à jour depuis IE7.
Depuis la fonction de réglage est sous HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl vous peut être en mesure de remplacer la valeur dans votre processus via une API de registre crochet.
GetOverrideKeyPath
.