La version par défaut du contrôle du navigateur web dans un fichier C# Formulaires Windows L'application est 7. J'ai changé à 9 par l'article _Emulation de navigateur_ Mais comment est-il possible d'utiliser la dernière version de l'Internet Explorer installé dans un contrôle de navigateur web ?
Réponses
Trop de publicités?J'ai vu la réponse de Veer. Je pense qu'elle est correcte, mais elle n'a pas fonctionné pour moi. Peut-être que j'utilise .NET 4 et que j'utilise un système d'exploitation 64x, alors veuillez vérifier cela.
Vous pouvez le mettre en place ou le vérifier au démarrage de votre application :
private void Form1_Load(object sender, EventArgs e)
{
var appName = Process.GetCurrentProcess().ProcessName + ".exe";
SetIE8KeyforWebBrowserControl(appName);
}
private void SetIE8KeyforWebBrowserControl(string appName)
{
RegistryKey Regkey = null;
try
{
// For 64 bit machine
if (Environment.Is64BitOperatingSystem)
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Wow6432Node\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
else //For 32 bit machine
Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
// If the path is not correct or
// if the user haven't priviledges to access the registry
if (Regkey == null)
{
MessageBox.Show("Application Settings Failed - Address Not found");
return;
}
string FindAppkey = Convert.ToString(Regkey.GetValue(appName));
// Check if key is already present
if (FindAppkey == "8000")
{
MessageBox.Show("Required Application Settings Present");
Regkey.Close();
return;
}
// If a key is not present add the key, Key value 8000 (decimal)
if (string.IsNullOrEmpty(FindAppkey))
Regkey.SetValue(appName, unchecked((int)0x1F40), RegistryValueKind.DWord);
// Check for the key after adding
FindAppkey = Convert.ToString(Regkey.GetValue(appName));
if (FindAppkey == "8000")
MessageBox.Show("Application Settings Applied Successfully");
else
MessageBox.Show("Application Settings Failed, Ref: " + FindAppkey);
}
catch (Exception ex)
{
MessageBox.Show("Application Settings Failed");
MessageBox.Show(ex.Message);
}
finally
{
// Close the Registry
if (Regkey != null)
Regkey.Close();
}
}
Vous pouvez trouver messagebox.show, juste pour tester.
Les clés sont les suivantes :
11001 (0x2AF9) - Internet Explorer 11. Les pages Web s'affichent en mode IE11 indépendamment de l'option
!DOCTYPE
directive.11000 (0x2AF8) - Internet Explorer 11. Les pages Web contenant fondées sur des normes
!DOCTYPE
s'affichent en mode bordure d'IE11. Valeur par défaut pour IE11.10001 (0x2711) - Internet Explorer 10. Les pages Web sont affichées en mode Standards IE10 indépendamment de l'option
!DOCTYPE
directive.10000 (0x2710) - Internet Explorer 10. Les pages Web contenant des fichiers
!DOCTYPE
sont affichées en mode standard IE10. Valeur par défaut de pour Internet Explorer 10.9999 (0x270F) - Internet Explorer 9. Les pages Web sont affichées en mode IE9 en mode standard, indépendamment de l'option
!DOCTYPE
directive.9000 (0x2328) - Internet Explorer 9. Les pages Web contenant fondées sur des normes
!DOCTYPE
sont affichées en mode IE9.8888 (0x22B8) - Les pages Web s'affichent en mode standard IE8, quel que soit le
!DOCTYPE
directive.8000 (0x1F40) - Les pages web contenant des normes
!DOCTYPE
sont affichées en mode IE8.7000 (0x1B58) - Les pages web contenant des normes
!DOCTYPE
sont affichées en mode standard IE7.
_Référence : MSDN : Contrôles des fonctionnalités Internet_
J'ai vu des applications comme Skype utiliser 10001. Je ne sais pas.
NOTE
L'application d'installation va modifier le registre. Vous devrez peut-être ajouter une ligne dans le fichier Manifest pour éviter les erreurs dues aux autorisations de modification du registre :
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
MISE À JOUR 1
Il s'agit d'un cours qui permettra d'obtenir la dernière version d'IE sur Windows et d'apporter les modifications nécessaires ;
public class WebBrowserHelper
{
public static int GetEmbVersion()
{
int ieVer = GetBrowserVersion();
if (ieVer > 9)
return ieVer * 1000 + 1;
if (ieVer > 7)
return ieVer * 1111;
return 7000;
} // End Function GetEmbVersion
public static void FixBrowserVersion()
{
string appName = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location);
FixBrowserVersion(appName);
}
public static void FixBrowserVersion(string appName)
{
FixBrowserVersion(appName, GetEmbVersion());
} // End Sub FixBrowserVersion
// FixBrowserVersion("<YourAppName>", 9000);
public static void FixBrowserVersion(string appName, int ieVer)
{
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".exe", ieVer);
FixBrowserVersion_Internal("HKEY_LOCAL_MACHINE", appName + ".vshost.exe", ieVer);
FixBrowserVersion_Internal("HKEY_CURRENT_USER", appName + ".vshost.exe", ieVer);
} // End Sub FixBrowserVersion
private static void FixBrowserVersion_Internal(string root, string appName, int ieVer)
{
try
{
//For 64 bit Machine
if (Environment.Is64BitOperatingSystem)
Microsoft.Win32.Registry.SetValue(root + @"\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
else //For 32 bit Machine
Microsoft.Win32.Registry.SetValue(root + @"\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", appName, ieVer);
}
catch (Exception)
{
// some config will hit access rights exceptions
// this is why we try with both LOCAL_MACHINE and CURRENT_USER
}
} // End Sub FixBrowserVersion_Internal
public static int GetBrowserVersion()
{
// string strKeyPath = @"HKLM\SOFTWARE\Microsoft\Internet Explorer";
string strKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer";
string[] ls = new string[] { "svcVersion", "svcUpdateVersion", "Version", "W2kVersion" };
int maxVer = 0;
for (int i = 0; i < ls.Length; ++i)
{
object objVal = Microsoft.Win32.Registry.GetValue(strKeyPath, ls[i], "0");
string strVal = System.Convert.ToString(objVal);
if (strVal != null)
{
int iPos = strVal.IndexOf('.');
if (iPos > 0)
strVal = strVal.Substring(0, iPos);
int res = 0;
if (int.TryParse(strVal, out res))
maxVer = Math.Max(maxVer, res);
} // End if (strVal != null)
} // Next i
return maxVer;
} // End Function GetBrowserVersion
}
Utilisation de la classe comme suit
WebBrowserHelper.FixBrowserVersion();
WebBrowserHelper.FixBrowserVersion("SomeAppName");
WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer);
vous pouvez faire face à un problème pour dans la comparaison de Windows 10, mai en raison de votre site Web lui-même vous pouvez avoir besoin d'ajouter cette balise méta
<meta http-equiv="X-UA-Compatible" content="IE=11" >
Profitez-en :)
En utilisant les valeurs de MSDN :
int BrowserVer, RegVal;
// get the installed IE version
using (WebBrowser Wb = new WebBrowser())
BrowserVer = Wb.Version.Major;
// set the appropriate IE version
if (BrowserVer >= 11)
RegVal = 11001;
else if (BrowserVer == 10)
RegVal = 10001;
else if (BrowserVer == 9)
RegVal = 9999;
else if (BrowserVer == 8)
RegVal = 8888;
else
RegVal = 7000;
// set the actual key
using (RegistryKey Key = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", RegistryKeyPermissionCheck.ReadWriteSubTree))
if (Key.GetValue(System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe") == null)
Key.SetValue(System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe", RegVal, RegistryValueKind.DWord);
var appName = System.Diagnostics.Process.GetCurrentProcess().ProcessName + ".exe";
using (var Key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true))
Key.SetValue(appName, 99999, RegistryValueKind.DWord);
D'après ce que j'ai lu ici ( Contrôle de la compatibilité des contrôles WebBrowser :
Que se passe-t-il si je fixe la valeur du mode de document FEATURE_BROWSER_EMULATION à un niveau supérieur à celui de la version d'IE sur le client ?
Évidemment, le contrôle du navigateur ne peut prendre en charge qu'un mode document inférieur ou égal à la version d'IE installée sur le client. L'utilisation de la clé FEATURE_BROWSER_EMULATION fonctionne mieux pour les applications d'entreprise où il existe une version déployée et prise en charge du navigateur. Dans le cas où vous définissez la valeur d'un mode de navigation supérieur à la version du navigateur installé sur le client, le contrôle du navigateur choisira le mode de document le plus élevé disponible.
Le plus simple est de mettre un nombre décimal très élevé...
Plutôt que de changer la RegKey, j'ai pu mettre une ligne dans l'en-tête de mon HTML :
<html>
<head>
<!-- Use lastest version of Internet Explorer -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- Insert other header tags here -->
</head>
...
</html>
Voir Contrôle du navigateur Web et spécification de la version d'IE .
Vous pouvez essayer ceci enlace
try
{
var IEVAlue = 9000; // can be: 9999 , 9000, 8888, 8000, 7000
var targetApplication = Processes.getCurrentProcessName() + ".exe";
var localMachine = Registry.LocalMachine;
var parentKeyLocation = @"SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl";
var keyName = "FEATURE_BROWSER_EMULATION";
"opening up Key: {0} at {1}".info(keyName, parentKeyLocation);
var subKey = localMachine.getOrCreateSubKey(parentKeyLocation,keyName,true);
subKey.SetValue(targetApplication, IEVAlue,RegistryValueKind.DWord);
return "all done, now try it on a new process".info();
}
catch(Exception ex)
{
ex.log();
"NOTE: you need to run this under no UAC".info();
}
- Réponses précédentes
- Plus de réponses