C#Windows Forms 应用程序中webbrowser控件的默认版本为7。 浏览器仿真 文章将我更改为9 ,但是如何在webbrowser控件中使用最新版本的已安装Internet Explorer?
我看到了维尔的答案。我认为是正确的,但是我没有为我工作。也许我正在使用.NET 4,并且正在使用64x OS,所以请检查一下。
您可以进行设置或在启动应用程序时进行检查:
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(); } }
您可能会发现messagebox.show,仅用于测试。
键如下:
11001(0x2AF9) -Internet Explorer11。无论!DOCTYPE指令如何,网页均以IE11边缘模式显示。 11000(0x2AF8) -Internet Explorer11。包含基于标准的!DOCTYPE指令的网页以IE11边缘模式显示。IE11的默认值。 10001(0x2711) -Internet Explorer10。无论使用何种!DOCTYPE指令,网页均以IE10标准模式显示。 10000(0x2710) -Internet Explorer10。包含基于标准的!DOCTYPE指令的网页 以IE10标准模式显示。Internet Explorer 10的默认值。 9999(0x270F) -Internet Explorer9。无论使用何种!DOCTYPE指令,网页均以IE9标准模式显示。 9000(0x2328) -Internet Explorer9。包含基于标准的!DOCTYPE指令的网页以IE9模式显示。 8888(0x22B8) -网页以IE8标准模式显示,与!DOCTYPE指令无关。 8000(0x1F40) -包含基于标准的!DOCTYPE 指令的网页以IE8模式显示。 7000(0x1B58) -包含基于标准的!DOCTYPE 指令的网页以IE7标准模式显示。
11001(0x2AF9) -Internet Explorer11。无论!DOCTYPE指令如何,网页均以IE11边缘模式显示。
!DOCTYPE
11000(0x2AF8) -Internet Explorer11。包含基于标准的!DOCTYPE指令的网页以IE11边缘模式显示。IE11的默认值。
10001(0x2711) -Internet Explorer10。无论使用何种!DOCTYPE指令,网页均以IE10标准模式显示。
10000(0x2710) -Internet Explorer10。包含基于标准的!DOCTYPE指令的网页 以IE10标准模式显示。Internet Explorer 10的默认值。
9999(0x270F) -Internet Explorer9。无论使用何种!DOCTYPE指令,网页均以IE9标准模式显示。
9000(0x2328) -Internet Explorer9。包含基于标准的!DOCTYPE指令的网页以IE9模式显示。
8888(0x22B8) -网页以IE8标准模式显示,与!DOCTYPE指令无关。
8000(0x1F40) -包含基于标准的!DOCTYPE 指令的网页以IE8模式显示。
7000(0x1B58) -包含基于标准的!DOCTYPE 指令的网页以IE7标准模式显示。
参考: MSDN:Internet功能控件
我看到像Skype这样的应用程序使用10001。我不知道。
注意
安装程序将更改注册表。您可能需要在清单文件中添加一行,以避免由于注册表更改权限而导致的错误:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
更新1
这是一个将在Windows上获取IE的最新版本并进行相应更改的类;
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 }
使用类如下
WebBrowserHelper.FixBrowserVersion(); WebBrowserHelper.FixBrowserVersion("SomeAppName"); WebBrowserHelper.FixBrowserVersion("SomeAppName",intIeVer);
您可能会遇到Windows 10的可比性问题,可能由于您的网站本身而需要添加此元标记
<meta http-equiv="X-UA-Compatible" content="IE=11" >
请享用 :)