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什么版本  浏览器控件基本就是什么版本了。

本文作者Healer007,部分内容参考网络,转载请注明来源。

Cie