C#:設置webBrowser框架與系統相對應的IE內核版本


通常情況下,我們直接調用C#的webBrowser控件,默認的瀏覽器內核是IE7。  那么如何修改控件調用的默認瀏覽器版本呢?

 1         /// <summary>  
 2         /// 修改注冊表信息來兼容當前程序  
 3         /// </summary>  
 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         /// <summary>  
21         /// 獲取瀏覽器的版本  
22         /// </summary>  
23         /// <returns></returns>  
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         /// <summary>  
48         /// 通過版本得到瀏覽器模式的值  
49         /// </summary>  
50         /// <param name="browserVersion"></param>  
51         /// <returns></returns>  
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         }
View Code

通過調用以上的方法我們就可以設置webBrowser控件的調用的默認IE內核了。

在調用前,我們先判斷windows系統的版本,依據不同的系統版本設置不同的調用內核。

 1         /// <summary>
 2         /// 查詢系統環境是否支持IE8以上版本
 3         /// </summary>
 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,部分內容參考網絡,轉載請注明來源。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM