将WPF WebBrowser控件设置为使用IE10模式

15

我该如何设置WPF WebBrowser控件以在机器上安装的IE10模式或更高版本中呈现页面? 默认情况下,如果我在任何操作系统> Windows 7的计算机上创建一个.NET 4或.NET 4.5应用程序,则仅使用IE7模式呈现HTML页面。(如有错误请指出)。 如果目标机器安装了IE10,如何启用应用程序以在IE10模式下呈现HTML页面?

3个回答

24

如果您不想修改注册表,并且您控制网页,则可以使用

<meta http-equiv="X-UA-Compatible" content="IE=10">

我认为文档头部的标签必须放在<title>标签之前或紧随其后才能起作用。


1
这是真正正确的答案。无需编辑注册表,对我来说它完美地运行了。 - scottheckel
我可以有多个吗?假设用户在Windows 7上运行,并且我设置了“IE = 11”,那么Windows 7会以IE10模式呈现它吗? - Luke Vo
2
@Luke 设置 content="IE=edge"。 - Der_Meister
确认。如果您控制在HTML控件中加载的内容,这是最好的选择。没有可能影响其他应用程序的注册表更改。谢谢。 - carlos357

7

如果我们进行注册表编辑,那么我也必须在目标机器上执行相同的操作,对吗?另外,如果通过更改注册表将浏览器模式更改为IE9 / 10,这是否仅影响应用程序内部的浏览器控件,还是整个IE应用程序都会受到影响? - Sebastian
你必须在目标机器上执行相同的操作。它仅影响应用程序中的浏览器,因为你必须在注册表中设置应用程序的名称。 - user3337803
1
我按照http://kirubhananth.blogspot.in/2013/04/how-to-load-html-5-content-in-wpf.html中的说明进行操作,但我的文档模式为5。有什么想法吗?但是我的注册表显示IETest.exe值为270f(IE 9)。 IETest.exe的位置是否会产生任何影响? - Sebastian
如果您的WPF应用程序是32位的,则必须使用Wow6432Node,而如果是64位,则不需要。 - user3337803
我的应用程序针对任何平台模式,我尝试添加32位和64位,但所有情况下都返回5。 - Sebastian
显示剩余3条评论

5

如果需要在WPF WebBrowser控件中使用IE11模式,可以在主窗口的构造函数中添加以下代码:

var pricipal = new System.Security.Principal.WindowsPrincipal(
  System.Security.Principal.WindowsIdentity.GetCurrent());
if(pricipal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)) {
    RegistryKey registrybrowser = Registry.LocalMachine.OpenSubKey
        (@"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
    string myProgramName = Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    var currentValue = registrybrowser.GetValue(myProgramName);
    if (currentValue == null || (int)currentValue != 0x00002af9)
        registrybrowser.SetValue(myProgramName, 0x00002af9, RegistryValueKind.DWord);
}
else
    this.Title += " ( Первый раз запускать с правами админа )";

如果您想在Visual Studio中运行时看到WPF WebBrowser控件使用IE11模式,需要在注册表中添加所有程序的“*”项。以下是相关代码:

var pricipal = new System.Security.Principal.WindowsPrincipal(
    System.Security.Principal.WindowsIdentity.GetCurrent());
if (pricipal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)) {
    RegistryKey registrybrowser = Registry.LocalMachine.OpenSubKey
    (@"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
    var currentValue = registrybrowser.GetValue("*");
    if (currentValue == null || (int)currentValue != 0x00002af9)
        registrybrowser.SetValue("*", 0x00002af9, RegistryValueKind.DWord);
}
else
    this.Title += " ( Первый раз запускать с правами админа )";

已在Windows 10和Visual Studio 2015上检查。

备注:如果需要其他版本Internet Explorer的代码,请查看此处


1
谢谢你提供的代码,这是唯一在W10上运行的代码。 然而,在调试模式下,您不需要添加所有程序才能使其工作。您可以像注册程序名称一样注册vshost名称。 string appName = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location); string appNameExe = appName + ".exe"; string appVSNameExe = appName + ".vshost..exe";然后将当前值应用于appNameExe和appVSNameExe,它们都可以正常工作,而无需强制使用* all。 - Luishg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接