[转载] Winform WebBrowser 使用 Edge 内核

原文地址 C# 设置 WebBrowser 使用 Edge 内核_c# webbrowser 内核 - CSDN 博客

原文内容

1. 问题描述

用 C# 写了一个小工具, 需要显示网页上的内容, 但 WebBrowser 使用的是 IE 内核, 不能很好的展示网页

2. 解决方法

通过一些尝试, 在巧合之下找出了一种方法, 成功的让 WebBrowser 用上了 Edge 内核, 先上图

上代码:

/// <summary>
/// 修改注册表信息使WebBrowser使用指定版本IE内核
/// </summary>
public static void SetFeatures(UInt32 ieMode) {
  if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) {
    throw new ApplicationException();
  }
  //获取程序及名称
  string appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
  string featureControlRegKey = "HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\";
  //设置浏览器对应用程序(appName)以什么模式(ieMode)运行
  Registry.SetValue(featureControlRegKey + "FEATURE_BROWSER_EMULATION", appName, ieMode, RegistryValueKind.DWord);
  //不晓得设置有什么用
  Registry.SetValue(featureControlRegKey + "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", appName, 1, RegistryValueKind.DWord);
}

这个函数是网上复制的, 传入 11000IE11, 9000IE9, 只不过当试着传入 6000 时, 理应是 IE6, 可实际却是 Edge, 这时进一步测试, 当传入除 IE 现有版本以外的一些数值时 WebBrowser 都使用 Edge 内核

3. 结论

将 IE 版本号设置为非 IE 版本的数值就能使用 Edge 内核

小记

使用效果:

  SetFeatures(898989545);	// 随便写一个注册表内不存在的IE版本号

image-20231012112950183

文章内修改内核版本是通过 SetFeatures 方法来实现,这段代码主要用于设置IE的特性和模式,特别是为了兼容性和性能方面的调整,以确保内嵌的WebBrowser控件在运行时以特定的IE版本或模式进行渲染。

起作用的主要是后面两句修改注册表的内容:

  • FEATURE_BROWSER_EMULATION:这个特性用于指定应用程序应以哪个版本的IE模式运行。用于确保Web页面在内嵌的WebBrowser控件中以指定的IE版本进行呈现。ieMode参数指定要使用的IE模式。
  • FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION:这个特性是用于性能优化的,设置为1表示启用"子元素裁剪优化",可以提高渲染性能。

使用过程中通过调整不同的ieMode参数来指定WebBrowser的内核版本,一些常见的 ieMode 参数和与之对应的IE版本:

  1. IE7 模式:IE7模式将应用程序模拟为Internet Explorer 7。这通常是最低的模拟模式。
    • 7000 表示IE7模式。
  2. IE8 模式:IE8模式将应用程序模拟为Internet Explorer 8。
    • 8000 表示IE8模式。
  3. IE8 强制标准模式:IE8强制标准模式将应用程序模拟为Internet Explorer 8,同时强制使用标准模式呈现页面。
    • 8888 表示IE8强制标准模式。
  4. IE9 模式:IE9模式将应用程序模拟为Internet Explorer 9。
    • 9000 表示IE9模式。
  5. IE10 模式:IE10模式将应用程序模拟为Internet Explorer 10。
    • 10000 表示IE10模式。
  6. IE11 模式:IE11模式将应用程序模拟为Internet Explorer 11。
    • 11000 表示IE11模式。

原文内容补充: 将 IE 版本号设置为非 IE 版本的数值就能使用 Edge 内核 ,是因为在 Windows 操作系统中使用 WebBrowser 控件时,如果设置的 ieMode 参数无效或未明确定义,WebBrowser 控件将默认以 Edge 模式运行,而不是使用较旧版本的 Internet Explorer 模式。

也就是说,ieMode 参数的有效值通常是与注册表中定义的IE版本号相关的,如前面提到的一些常见的值。如果提供一个未被识别的值,WebBrowser 控件可能会默认选择 Edge 模式。这是由于Microsoft希望鼓励开发者采用最新的技术和标准,而不是过时的IE版本。

⭕使用该方法需要注意的是,修改注册表是系统级的操作,需要管理员权限来执行。如果在程序中使用,需要确保适当的处理权限问题,避免权限拒绝错误。

⭕此外,修改注册表是存在潜在风险的,需要谨慎操作。

⭕浏览器内核检测工具地址:https://ie.icoa.cn/

保留项

每台PC手动更改注册表项来强制 WebBrowser 控件使用特定的IE版本:

  • 打开注册表编辑器(Registry Editor)。您可以按Win + R,然后输入 "regedit" 并按回车键来打开它。

  • 在注册表编辑器中,导航到以下路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

取决于程序是32位还是64位。

在 FEATURE_BROWSER_EMULATION 路径下,创建一个新的 DWORD (32-bit) 值,命名为应用程序的名称,例如 "YourApp.exe",然后将其数值数据设置为适当的IE版本。例如,要强制使用IE11模式,将数值数据设置为 11001(以十进制表示)。

  • 关闭注册表编辑器。

在您的应用程序中使用WebBrowser控件时,它将使用设置的IE版本进行渲染。

posted @ 2023-10-12 11:50  PixelKiwi  阅读(1465)  评论(1编辑  收藏  举报