[转载] Winform WebBrowser 使用 Edge 内核
原文内容
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);
}
这个函数是网上复制的, 传入 11000 是 IE11, 9000 是 IE9, 只不过当试着传入 6000 时, 理应是 IE6, 可实际却是 Edge, 这时进一步测试, 当传入除 IE 现有版本以外的一些数值时 WebBrowser 都使用 Edge 内核
3. 结论
将 IE 版本号设置为非 IE 版本的数值就能使用 Edge 内核
小记
使用效果:
SetFeatures(898989545); // 随便写一个注册表内不存在的IE版本号
文章内修改内核版本是通过 SetFeatures
方法来实现,这段代码主要用于设置IE的特性和模式,特别是为了兼容性和性能方面的调整,以确保内嵌的WebBrowser控件在运行时以特定的IE版本或模式进行渲染。
起作用的主要是后面两句修改注册表的内容:
FEATURE_BROWSER_EMULATION
:这个特性用于指定应用程序应以哪个版本的IE模式运行。用于确保Web页面在内嵌的WebBrowser控件中以指定的IE版本进行呈现。ieMode
参数指定要使用的IE模式。FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION
:这个特性是用于性能优化的,设置为1表示启用"子元素裁剪优化",可以提高渲染性能。
使用过程中通过调整不同的ieMode参数来指定WebBrowser的内核版本,一些常见的 ieMode
参数和与之对应的IE版本:
- IE7 模式:IE7模式将应用程序模拟为Internet Explorer 7。这通常是最低的模拟模式。
7000
表示IE7模式。
- IE8 模式:IE8模式将应用程序模拟为Internet Explorer 8。
8000
表示IE8模式。
- IE8 强制标准模式:IE8强制标准模式将应用程序模拟为Internet Explorer 8,同时强制使用标准模式呈现页面。
8888
表示IE8强制标准模式。
- IE9 模式:IE9模式将应用程序模拟为Internet Explorer 9。
9000
表示IE9模式。
- IE10 模式:IE10模式将应用程序模拟为Internet Explorer 10。
10000
表示IE10模式。
- 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版本进行渲染。