[转载] 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版本进行渲染。
[转载] Winform WebBrowser 使用 Edge 内核的更多相关文章
- C#设置WebBrowser使用Edge内核
原文:C#设置WebBrowser使用Edge内核 1. 问题描述 用C#写了一个小工具, 需要显示网页上的内容, 但WebBrowser使用的是IE内核, 不能很好的展示网页 2. 解决方法 通过一 ...
- C# winform webbrowser如何指定内核为IE11? 输出 this.webbrowser.Version 显示版本是IE11的,但实际版本不是啊! 网上打的修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULA
最佳答案 1)假设你应用程序的名字为MyApplication.exe 2)运行Regedit,打开注册表,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\M ...
- C# winform webbrowser如何指定内核为IE11?
1)假设你应用程序的名字为MyApplication.exe 2)运行Regedit,打开注册表,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsof ...
- C# (转载)webbrowser专题(参考资料:https://www.cnblogs.com/blogpro/p/11458390.html)
C# .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 2 Study Case :高亮显示 上一个例子中我们学会了查找文本——究跟到底,对Web页面还是只读不写.那么,如果 ...
- winform WebBrowser如何修改使用默认的IE浏览器版本
在搜了一些相关资料原来WebBrowser使用的是IE的兼容模式进行浏览(IE7模式). 建议:先添加注册表中,然后使用注册表编辑器导出功能,产生reg注册文件:方便日后使用. Winform We ...
- C# Winform WebBrowser控件
C# WinForm WebBrowser 1.主要用途:使用户可以在窗体中导航网页. 2.注意:WebBrowser 控件会占用大量资源.使用完该控件后一定要调用 Dispose 方法,以便确保及时 ...
- PCB Winform使用谷歌webkit内核 应用
我们Winfrom界面嵌入网页最常用的是WebBrowser控件,因为微软自带的,使用方便,但在实际使用起来,会遇到各种麻烦(JS,不兼容问题,渲染等问题) 而实际WebBrowser控件内核是微软的 ...
- 调整Winfrom控件WebBrowser的默认浏览器内核版本
一.问题解析: 今天在调试程序的时候,需要使用C#的客户端远程登录一个Web页面,用到了WebBrowser控件.但是却发现了一件很神奇的事情:当前浏览器使用的内核,可以通过访问下面这个网站获取:ht ...
- 调整WebBrowser的默认浏览器内核版本
原文出自:https://my.oschina.net/Tsybius2014/blog/492107 注:这个是写.net控件,其实delphi是一样的.作者已经写的比较全面了,我只是做了一点修改 ...
- winform webbrowser如何强制使用ie11内核?
webkit.net ,cefsharp,openwebkit.net等这些基于谷歌或者基于firfox内核的浏览器有个共同点,就是必须指定winform为x86的才能使用, 而且使用过程中也是各种坑 ...
随机推荐
- Django视图与网址进阶
1. 采用/add/?a=4&b=5这样get方法进行 1)修改learn/views.py文件 代码: #增加新函数 def add(request): a=request.GET['a'] ...
- 解析BeanDefinitionRegistry与BeanDefinition合并
本文分享自华为云社区<Spring高手之路12--BeanDefinitionRegistry与BeanDefinition合并解析>,作者:砖业洋__ . 1.什么是BeanDefini ...
- java实现的类似于sql join操作的工具类,通用递归,最低需要java8
直接上代码,缺包的自行替换为自己项目中存在的 import java.util.ArrayList; import java.util.Collection; import java.util.Has ...
- 数据可视化【原创】vue复合数字形式展示
做数据可视化的时候,经常碰到需要很灵活的数字形式展示. 先上个效果图: 如图包括名称,数量,别名,单位,上升下降,环比等等的复合数据展示,并且需要支持样式灵活配置. 此组件包括2个模块,父容器组件bo ...
- 避坑|在读取excel.xlsx文件中的内容时发现明明只有3行,但跑起来却认为有13行,导致有10行None,UI自动化测试代码空跑了10次;|UI自动化测试|数据驱动
在读取excel.xlsx文件中的内容时发现明明只有3行,但跑起来却认为有13行,导致有10行None,UI自动化测试代码空跑了10次: 原因:excel.xlsx内容清除时用delete快捷键导致, ...
- RK3568开发笔记(六):开发板烧写ubuntu固件(支持mipi屏镜像+支持hdmi屏镜像)
前言 编译了uboot,kernel,buildroot后,可以单独输入固件,也可以整体打包成rootfs进行一次性输入,rootfs直接更新升级这个方式目前也是常用的. 烧写器软件:RKDe ...
- TIKZ全局样式设置
tikz绘图引擎 TIKZ绘图引擎是基于tex实现,代码极其复杂,每次编写都要单独设置样式,甚是繁琐,如何能够全局设置呢? \begin{tikzpicture}[ auto, % 决策结点 deci ...
- Go语句与表达式深度解析:全案例手册
关注公众号[TechLeadCloud],分享互联网架构.云服务技术的全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资 ...
- 2023 ICPC 网络赛 I
没留够时间准备导致开考的时候耽搁了 开场我先写缺省源,抄串了一行,后面才发现...然后看了 L 发现是签到,此时 ddw 会了 A 让 zsy 上去写,我等了一会才把 zsy 撵下来写 L 是个失误 ...
- ios ipa apple company 开发者账号申请分享攻略
ios公司开发者账号申请分享攻略 好不容易终于申请下来了ios 公司开发者账号,真是一路艰辛和漫长啊,特别是对于远在大洋彼岸的大中华国家.以下我就分享一下这一路下来的经验,希望对于那些新手同仁们有所帮 ...