zoukankan      html  css  js  c++  java
  • 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_USERSoftwareMicrosoftInternet ExplorerMainFeatureControl";
    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(@"SOFTWAREMicrosoftInternet 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,部分内容参考网络,转载请注明来源。

  • 相关阅读:
    三步堵死SQL注入漏洞
    现在与大家探讨安全
    如何在SQL注入时保护数据库
    SQL注入与ASP木马上传
    C# 检查字符串,防SQL注入攻击
    关于对SQL注入80004005 及其它错误消息分析
    SQL注入入侵动网SQL版论坛
    天晨设计整站SQL注入漏洞
    用vbs来写sql注入等80端口的攻击脚本
    利用SQL注入2分钟入侵网站全程实录
  • 原文地址:https://www.cnblogs.com/healer007/p/10196065.html
Copyright © 2011-2022 走看看