无法强制WebBrowser控件使用当前版本的IE呈现

我需要Windows窗体应用程序中的WebBrowser控件使用最新版本的Internet Explorer呈现页面,或至less安装在我的机器上的最新版本 – 即IE 11。

几个星期前,在我开始这个项目的工作之前,我遇到了一个名为DevDocs.io的网站,并在IE 11中运行。 但是,即使在应用registry黑客之后,我无法在WebBrowser控件中查看DevDocs.io,因为显然我正在使用“不支持”的浏览器。 然后接着说我需要使用Firefox,Chrome或IE 10+。 我以为我使用IE 10 +,因为我已经将DWORD添加到registry中。

我遇到了很多网站,只是不显示或行为正常,因为WebBrowser控件仍然不是呈现在IE11,或10,或9 …

有两件事我想知道:

  • 是否有一个方法或类暴露WebBrowser控件使用的渲染引擎?
  • DWORDregistry为什么不能正常工作,我怎样才能使它工作?

要清楚的是,我已经到了registry,并抬起头: HKEY LOCAL MACHINE > SOFTWARE > MICROSOFT > INTERNET EXPLORER > MAIN > FEATURE CONTROL > FEATURE_BROWSER_EMULATION并添加了一个DWORD值myApp.exe11000

11000是得到它使用IE11呈现,按照http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation 。

Solutions Collecting From Web of "无法强制WebBrowser控件使用当前版本的IE呈现"

您需要在主(64位)节点和32位节点HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl下添加注册表项

您应该访问http://webdbg.com/ua.aspx来验证文档模式和UA字符串。

这里我通常使用和为我工作的方法(32位和64位应用程序):

  [STAThread] static void Main() { if (!mutex.WaitOne(TimeSpan.FromSeconds(2), false)) { //another application instance is running return; } try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var targetApplication = Process.GetCurrentProcess().ProcessName + ".exe"; int ie_emulation = 10000; try { string tmp = Properties.Settings.Default.ie_emulation; ie_emulation = int.Parse(tmp); } catch { } SetIEVersioneKeyforWebBrowserControl(targetApplication, ie_emulation); m_webLoader = new FormMain(); Application.Run(m_webLoader); } finally { mutex.ReleaseMutex(); } } private static void SetIEVersioneKeyforWebBrowserControl(string appName, int ieval) { RegistryKey Regkey = null; try { Regkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true); //If the path is not correct or //If user't have priviledges to access registry if (Regkey == null) { YukLoggerObj.logWarnMsg("Application FEATURE_BROWSER_EMULATION Failed - Registry key Not found"); return; } string FindAppkey = Convert.ToString(Regkey.GetValue(appName)); //Check if key is already present if (FindAppkey == "" + ieval) { YukLoggerObj.logInfoMsg("Application FEATURE_BROWSER_EMULATION already set to " + ieval); Regkey.Close(); return; } //If key is not present or different from desired, add/modify the key , key value Regkey.SetValue(appName, unchecked((int)ieval), RegistryValueKind.DWord); //check for the key after adding FindAppkey = Convert.ToString(Regkey.GetValue(appName)); if (FindAppkey == "" + ieval) YukLoggerObj.logInfoMsg("Application FEATURE_BROWSER_EMULATION changed to " + ieval + "; changes will be visible at application restart"); else YukLoggerObj.logWarnMsg("Application FEATURE_BROWSER_EMULATION setting failed; current value is " + ieval); } catch (Exception ex) { YukLoggerObj.logWarnMsg("Application FEATURE_BROWSER_EMULATION setting failed; " + ex.Message); } finally { //Close the Registry if (Regkey != null) Regkey.Close(); } }