通常情況下,我們直接調用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 }
通過調用以上的方法我們就可以設置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,部分內容參考網絡,轉載請注明來源。