web-dev-qa-db-fra.com

Comment désactiver l'affichage de compatibilité sur le IE WebBrowserControl dans une application WinForms?

Dans mon application WinForms, si j'utilise un contrôle WebBrowser, il semble être forcé en mode de compatibilité. Comment puis-je désactiver cela et le faire se comporter de la même façon que le mode autonome IE le fait sur ma machine lors de la navigation sur le même site?

  • Je ne souhaite pas modifier le registre. Je veux que tout soit contenu dans mon application.
  • Le site Web que je charge n'est pas le mien, je n'ai donc pas la possibilité d'y apporter des modifications (sauf si elles peuvent être effectuées par programme à partir de mon application).
33
Danny Tuppeny

Il n'y a aucun moyen de procéder autrement que de configurer les paramètres de registre suivants:

 HKLM\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 

ou s'il s'agit d'une application 32 bits sur Windows 64 bits:

 HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION` 

Ces paramètres n'apparaissent pas dans le contrôle WebBrowser.

Pour plus d'informations, veuillez consulter:

Quel est le mode de compatibilité IE compatibilité le navigateur Web utilise-t-il?

Au cas où le lien mourrait:

Vous créez une valeur DWORD correspondant au nom de votre exécutable et définissez cette valeur sur l'une des valeurs suivantes:

7000: les pages contenant des directives <!DOCTYPE> Normalisées sont affichées en mode IE7.
8000: les pages contenant des directives <!DOCTYPE> Normalisées sont affichées en mode IE8
8888: Les pages sont toujours affichées en mode IE8, quelle que soit la directive <!DOCTYPE>. (Cela contourne les exceptions répertoriées précédemment.)
9000: utilisez les paramètres IE9!
9999: Force IE9

Par exemple:

enter image description here

De mes propres expériences avec IE9:

  • 9000 - hérite du mode de compatibilité défini dans le paramètre de mode de compatibilité global d'IE9. c'est à dire.: enter image description here

  • 9999 - force IE9 à quitter le mode de compatibilité dans l'application hôte, quel que soit le paramètre de mode de compatibilité configuré globalement

Votre application devra probablement détecter quelle version sous-jacente IE version est disponible pour déterminer la valeur à utiliser:

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version 

ou s'il s'agit d'une application 32 bits sur Windows 64 bits:

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Version 

Il y a aussi cet ancien article de la sortie d'IE8 qui vaut le détour:

Plus d'améliorations d'extensibilité IE8

Vous pouvez également configurer ces paramètres par utilisateur sous:

 HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 
55
Kev

Bien que ce ne soit pas ce que vous avez demandé, si vous êtes propriétaire du site, vous pouvez ajouter ce qui suit dans la section head du html:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />

Voir: http://msdn.Microsoft.com/en-us/library/cc288325 (v = vs.85) .aspx

26

Voici le problème du problème: si un utilisateur active la vue de compatibilité dans IE8, il remplacera toutes les directives de page. Ainsi, toute page ou variable de serveur que vous essayez d'utiliser ne parviendra pas à empêcher IE de basculer vers la vue de compatibilité si l'utilisateur a activé cette fonctionnalité dans IE. La plupart des gens pensent que les directives de page ou une sorte de secret variable de serveur d'en-tête va réparer le site. Non. Aucune de ces solutions ne fonctionne si le paramètre a été remplacé manuellement. Je sais, ce n'est tout simplement pas cool. Donc, ce qui suit ne fonctionnera que si l'utilisateur n'a pas activé la fonction d'affichage de compatibilité.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />

Pour clarifier les étapes pour changer cela dans le registre, modifiez la clé:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

Ajoutez ensuite un nouveau DWORD appelé iexplore.exe . Pour ce faire, cliquez avec le bouton droit sur la clé et sélectionnez Nouveau> DWORD. Donnez à ce DWORD la valeur décimale de 9999 . Cela rendra tous les sites sans affichage de compatibilité. Pour réactiver la vue de compatibilité, supprimez ce DWORD. De plus, si vous souhaitez automatiser cette modification et exécuter un script batch sur votre système, consultez le script de Michal M.

https://Gist.github.com/michal-m/1853315

5
mbokil

Je sais que c'est une vieille question, mais il existe un moyen d'insérer un en-tête dans le contrôle webbrowser dans Visual Basic 2010 et versions ultérieures afin de désactiver la vue de compatibilité:

La première chose que vous devez faire est d'attraper la page Web actuelle, puis de remplacer la balise head comme suit:

Sub compatible()
' --- simple routine to disable compatible view.

    Dim the_url As String
    Dim message As String
    Dim theReplacement As String
    Dim oldMessage As String

    the_url = WebBrowser1.Url.OriginalString

    WebBrowser1.Navigate(the_url)

    message = "<head>" + Chr(13) + Chr(10) + "<meta http-equiv=" + Chr(34) + "X-UA-Compatible" + Chr(34) + "content=" + Chr(34) + "IE=Edge" + Chr(34) + " />" + Chr(13) + Chr(10) + "<base href=" + Chr(34) + the_url + Chr(34) + ">"

    oldMessage = WebBrowser1.DocumentText.ToString()

    theReplacement = Replace(oldMessage, "<head>", message)
    WebBrowser1.DocumentText = theReplacement

End Sub

Ce code ajoute les deux lignes suivantes dans le contrôle webbrowser:

<meta http-equiv="X-UA-Compatible"content="IE=Edge" />
<base href="(url of the web page)">
2
Cynthia Fridsma