Winform设置WebBowser访问网页内核版本
我们如果使用Winform打开网页,经常会碰到网页报错的问题,大多数情况是浏览器兼容的原因,我们可以通过设置更高版本的浏览器内核来规避。
整体思路:修改注册表信息来设置当前应用程序程序兼容的IE版本。
封装了一个通用类WebBrowserHelper:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | using Microsoft.Win32; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Helper { public class WebBrowserHelper { /// <summary> /// 修改注册表信息来兼容当前程序 /// </summary> public static void SetWebBrowserFeatures( int ieVersion) { // don't change the registry if running in-proc inside Visual Studio if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) return ; //获取程序及名称 var appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); //得到浏览器的模式的值 UInt32 ieMode = GeoEmulationModee(ieVersion); var featureControlRegKey = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\" ; //设置浏览器对应用程序(appName)以什么模式(ieMode)运行 Registry.SetValue(featureControlRegKey + "FEATURE_BROWSER_EMULATION" , appName, ieMode, RegistryValueKind.DWord); // enable the features which are "On" for the full Internet Explorer browser //不晓得设置有什么用 Registry.SetValue(featureControlRegKey + "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION" , appName, 1, RegistryValueKind.DWord); //Registry.SetValue(featureControlRegKey + "FEATURE_AJAX_CONNECTIONEVENTS", // appName, 1, RegistryValueKind.DWord); //Registry.SetValue(featureControlRegKey + "FEATURE_GPU_RENDERING", // appName, 1, RegistryValueKind.DWord); //Registry.SetValue(featureControlRegKey + "FEATURE_WEBOC_DOCUMENT_ZOOM", // appName, 1, RegistryValueKind.DWord); //Registry.SetValue(featureControlRegKey + "FEATURE_NINPUT_LEGACYMODE", // appName, 0, RegistryValueKind.DWord); } /// <summary> /// 获取浏览器的版本 /// </summary> /// <returns></returns> public static int GetBrowserVersion() { int browserVersion = 0; using ( var ieKey = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Internet Explorer" , RegistryKeyPermissionCheck.ReadSubTree, System.Security.AccessControl.RegistryRights.QueryValues)) { var version = ieKey.GetValue( "svcVersion" ); if ( null == version) { version = ieKey.GetValue( "Version" ); if ( null == version) throw new ApplicationException( "Microsoft Internet Explorer is required!" ); } int .TryParse(version.ToString().Split( '.' )[0], out browserVersion); } //如果小于7 if (browserVersion < 7) { throw new ApplicationException( "不支持的浏览器版本!" ); } return browserVersion; } /// <summary> /// 通过版本得到浏览器模式的值 /// </summary> /// <param name="browserVersion"></param> /// <returns></returns> public static UInt32 GeoEmulationModee( int browserVersion) { UInt32 mode = 11000; // Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 Standards mode. switch (browserVersion) { case 7: mode = 7000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. break ; case 8: mode = 8000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. break ; case 9: mode = 9000; // Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. break ; case 10: mode = 10000; // Internet Explorer 10. break ; case 11: mode = 11000; // Internet Explorer 11 break ; } return mode; } } } |
调用方法:
1 2 3 | this .webBrowser1.Size = new Size(1920, 1080); WebBrowserHelper.SetWebBrowserFeatures(11); //内核设为IE11 this .webBrowser1.Navigate( "要跳转的链接地址" ); |
***********************************
愿 你 有 前 进 一 寸 的 勇 气 , 亦 有 后 退 一 尺 的 从 容 。
***********************************
***********************************
请尊重作者的劳动成果,转载请注明出处。
***********************************
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix