在Webbrowser控件中使用Internet Explorer的最新版本

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,仅用于测试。

  • -Internet Explorer11。无论!DOCTYPE指令如何,网页均以IE11边缘模式显示。

  • -Internet

    Explorer11。包含基于标准的!DOCTYPE指令的网页以IE11边缘模式显示。IE11的默认值。

  • -Internet

    Explorer10。无论使用何种!DOCTYPE指令,网页均以IE10标准模式显示。

  • -Internet Explorer10。包含基于标准的!DOCTYPE指令的网页

    以IE10标准模式显示。Internet Explorer 10的默认值。

  • -Internet Explorer9。无论使用何种!DOCTYPE指令,网页均以IE9标准模式显示。

  • -Internet Explorer9。包含基于标准的!DOCTYPE指令的网页以IE9模式显示。

  • -网页以IE8标准模式显示,与!DOCTYPE指令无关。

  • -包含基于标准的!DOCTYPE 指令的网页以IE8模式显示。

  • -包含基于标准的!DOCTYPE 指令的网页以IE7标准模式显示。

参考: MSDN:Internet功能控件

我看到像Skype这样的应用程序使用10001。我不知道。

安装程序将更改注册表。您可能需要在清单文件中添加一行,以避免由于注册表更改权限而导致的错误:

<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

这是一个将在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" >

请享用 :)

以上是 在Webbrowser控件中使用Internet Explorer的最新版本 的全部内容, 来源链接: utcz.com/qa/430246.html

回到顶部