C#:设置webBrowser框架与系统相对应的IE内核版本
通常情况下,我们直接调用C#的webBrowser控件,默认的浏览器内核是IE7。 那么如何修改控件调用的默认浏览器版本呢?
1 ///2 /// 修改注册表信息来兼容当前程序 3 /// 4 static void SetWebBrowserFeatures(int ieVersion) 5 { 6 if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) 7 return; 8 //获取程序及名称 9 var appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); 10 //得到浏览器的模式的值 11 UInt32 ieMode = GeoEmulationModee(ieVersion); 12 var featureControlRegKey = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\"; 13 //设置浏览器对应用程序(appName)以什么模式(ieMode)运行 14 Registry.SetValue(featureControlRegKey + "FEATURE_BROWSER_EMULATION", 15 appName, ieMode, RegistryValueKind.DWord); 16 //不晓得设置有什么用 17 Registry.SetValue(featureControlRegKey + "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION", 18 appName, 1, RegistryValueKind.DWord); 19 } 20 /// 21 /// 获取浏览器的版本 22 /// 23 /// 24 static int GetBrowserVersion() 25 { 26 int browserVersion = 0; 27 using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer", 28 RegistryKeyPermissionCheck.ReadSubTree, 29 System.Security.AccessControl.RegistryRights.QueryValues)) 30 { 31 var version = ieKey.GetValue("svcVersion"); 32 if (null == version) 33 { 34 version = ieKey.GetValue("Version"); 35 if (null == version) 36 throw new ApplicationException("Microsoft Internet Explorer is required!"); 37 } 38 int.TryParse(version.ToString().Split('.')[0], out browserVersion); 39 } 40 //如果小于7 41 if (browserVersion < 7) 42 { 43 throw new ApplicationException("不支持的浏览器版本!"); 44 } 45 return browserVersion; 46 } 47 /// 48 /// 通过版本得到浏览器模式的值 49 /// 50 /// 51 /// 52 static UInt32 GeoEmulationModee(int browserVersion) 53 { 54 UInt32 mode = 11000; // Internet Explorer 11 55 switch (browserVersion) 56 { 57 case 7: 58 mode = 7000; // Internet Explorer 7 59 break; 60 case 8: 61 mode = 8000; // Internet Explorer 8 62 break; 63 case 9: 64 mode = 9000; // Internet Explorer 9 65 break; 66 case 10: 67 mode = 10000; // Internet Explorer 10. 68 break; 69 case 11: 70 mode = 11000; // Internet Explorer 11 71 break; 72 } 73 return mode; 74 }
通过调用以上的方法我们就可以设置webBrowser控件的调用的默认IE内核了。
在调用前,我们先判断windows系统的版本,依据不同的系统版本设置不同的调用内核。
1 ///2 /// 查询系统环境是否支持IE8以上版本 3 /// 4 public static bool IfWindowsSupport() 5 { 6 bool isWin7 = Environment.OSVersion.Version.Major > 6; 7 bool isSever2008R2 = Environment.OSVersion.Version.Major == 6 8 && Environment.OSVersion.Version.Minor >= 1; 9 10 if (!isWin7 && !isSever2008R2) 11 { 12 return false; 13 } 14 else return true; 15 }
在窗体的构造函数中调用设计窗体之前写上如下代码:
1 int ieVersion = GetBrowserVersion(); 2 if (IfWindowsSupport()) 3 { 4 SetWebBrowserFeatures(ieVersion < 11 ? ieVersion : 11); 5 } 6 else 7 { 8 //如果不支持IE8 则修改为当前系统的IE版本 9 SetWebBrowserFeatures(ieVersion < 7 ? 7: ieVersion); 10 }
OK了,现在系统IE什么版本 浏览器控件基本就是什么版本了。