在 webbrowser 控件中使用最新版本的 Internet Explorer [英] Use latest version of Internet Explorer in the webbrowser control
问题描述
C# Windows 窗体 中 webbrowser 控件的默认版本应用程序是 7.我已通过文章浏览器更改为 9模拟,但如何在网络浏览器控件中使用最新版本的已安装 Internet Explorer?
The default version of the webbrowser control in a C# Windows Forms application is 7. I have changed to 9 by the article Browser Emulation, but how is it possible to use the latest version of the installed Internet Explorer in a webbrowser control?
推荐答案
我看到了 Veer 的回答.我认为这是对的,但这不是我为我工作的.也许我使用的是 .NET 4 并且使用的是 64x 操作系统,所以请检查这个.
I saw Veer's answer. I think it's right, but it did not I work for me. Maybe I am using .NET 4 and am using 64x OS so kindly check this.
您可以在应用程序启动时进行设置或检查:
You may put in setup or check it in start-up of your 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();
}
}
你可能会找到 messagebox.show,只是为了测试.
You may find messagebox.show, just for testing.
键如下:
11001 (0x2AF9) - Internet Explorer 11.网页在 IE11 中显示边缘模式,与
!DOCTYPE
指令无关.
11001 (0x2AF9) - Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the
!DOCTYPE
directive.
11000 (0x2AF8) - Internet Explorer 11.网页包含基于标准的 !DOCTYPE
指令以 IE11 边缘模式显示.IE11 的默认值.
11000 (0x2AF8) - Internet Explorer 11. Webpages containing
standards-based !DOCTYPE
directives are displayed in IE11 edge mode.
Default value for IE11.
10001 (0x2711)- Internet Explorer 10.网页以 IE10 标准显示模式,与 !DOCTYPE
指令无关.
10001 (0x2711)- Internet Explorer 10. Webpages are displayed in IE10 Standards
mode, regardless of the !DOCTYPE
directive.
10000 (0x2710)- Internet Explorer 10.包含基于标准的网页!DOCTYPE
指令以 IE10 标准模式显示.默认Internet Explorer 10 的值.
10000 (0x2710)- Internet Explorer 10. Webpages containing standards-based
!DOCTYPE
directives are displayed in IE10 Standards mode. Default
value for Internet Explorer 10.
9999 (0x270F) - Internet Explorer 9.网页在 IE9 中显示标准模式,与 !DOCTYPE
指令无关.
9999 (0x270F) - Internet Explorer 9. Webpages are displayed in IE9
Standards mode, regardless of the !DOCTYPE
directive.
9000 (0x2328) - Internet Explorer 9.网页包含基于标准的 !DOCTYPE
指令在 IE9 模式下显示.
9000 (0x2328) - Internet Explorer 9. Webpages containing
standards-based !DOCTYPE
directives are displayed in IE9 mode.
8888 (0x22B8) - 网页以 IE8 标准模式显示,与 !DOCTYPE
指令无关.
8888 (0x22B8) - Webpages are displayed in IE8 Standards mode,
regardless of the !DOCTYPE
directive.
8000 (0x1F40) - 网页包含基于标准的 !DOCTYPE
指令以 IE8 模式显示.
8000 (0x1F40) - Webpages containing standards-based !DOCTYPE
directives are displayed in IE8 mode.
7000 (0x1B58) - 网页包含基于标准的 !DOCTYPE
指令以 IE7 标准模式显示.
7000 (0x1B58) - Webpages containing standards-based !DOCTYPE
directives are displayed in IE7 Standards mode.
参考:MSDN:互联网功能控制
我看到像 Skype 这样的应用程序使用 10001.我不知道.
I saw applications like Skype use 10001. I do not know.
注意
安装应用程序将更改注册表.您可能需要在清单文件中添加一行以避免由于注册表中的权限更改而导致的错误:
The setup application will change the registry. You may need to add a line in the Manifest File to avoid errors due to permissions of change in registry:
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
更新 1
这是一个将在 Windows 上获取最新版本的 IE 并按原样进行更改的类;
This is a class will get the latest version of IE on windows and make changes as should be;
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 + @"SoftwareWow6432NodeMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION", appName, ieVer);
else //For 32 bit Machine
Microsoft.Win32.Registry.SetValue(root + @"SoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_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 = @"HKLMSOFTWAREMicrosoftInternet Explorer";
string strKeyPath = @"HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet 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 相比的问题,这可能是由于您的网站本身造成的您可能需要添加此元标记
you may face a problem for in comparability of windows 10, may due to your website itself you may need to add this meta tag
<meta http-equiv="X-UA-Compatible" content="IE=11" >
享受:)
这篇关于在 webbrowser 控件中使用最新版本的 Internet Explorer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!