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?
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:
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.:
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:
Vous pouvez également configurer ces paramètres par utilisateur sous:
HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
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
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.
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)">