前言

.NET 版本更新了一代又一代,winform中的webbrowser控件的IE内核版本却始终用的IE7,好多网站都对IE7已经不支持。webbrowser这个控件就显得有些鸡肋,经过查找大佬门的代码和资料,终于找到了解决办法。这里做个记录。

代码实现

通用设置类:

using Microsoft.Win32;
using System;
using System.ComponentModel; namespace Common
{
public class SetWebBrowser
{
/// <summary>
/// 修改注册表信息来兼容当前程序
/// </summary>
/// <param name="ieVersion">设置IE版本</param>
public static void SetWebBrowserFeatures(int ieVersion)
{
//如果在Visual Studio中运行in-proc,不要更改注册表
if (LicenseManager.UsageMode != LicenseUsageMode.Runtime)
return;
//获取程序及名称
var appName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
//得到浏览器的模式的值
UInt32 ieMode = GeoEmulationModee(ieVersion);
var featureControlRegKey = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\";
//设置浏览器对应用程序(appName)以什么模式(ieMode)运行
Registry.SetValue(featureControlRegKey + "FEATURE_BROWSER_EMULATION",
appName, ieMode, RegistryValueKind.DWord);
Registry.SetValue(featureControlRegKey + "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION",
appName, 1, RegistryValueKind.DWord); //Registry.SetValue(featureControlRegKey + "FEATURE_AJAX_CONNECTIONEVENTS",
// appName, 1, RegistryValueKind.DWord); //Registry.SetValue(featureControlRegKey + "FEATURE_GPU_RENDERING",
// appName, 1, RegistryValueKind.DWord); //Registry.SetValue(featureControlRegKey + "FEATURE_WEBOC_DOCUMENT_ZOOM",
// appName, 1, RegistryValueKind.DWord); //Registry.SetValue(featureControlRegKey + "FEATURE_NINPUT_LEGACYMODE",
// appName, 0, RegistryValueKind.DWord);
}
/// <summary>
/// 获取浏览器的版本
/// </summary>
/// <returns>返回IE版本</returns>
public static int GetBrowserVersion()
{
int browserVersion = 0;
using (var ieKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer",
RegistryKeyPermissionCheck.ReadSubTree,
System.Security.AccessControl.RegistryRights.QueryValues))
{
var version = ieKey.GetValue("svcVersion");
if (null == version)
{
version = ieKey.GetValue("Version");
if (null == version)
throw new ApplicationException("Microsoft Internet Explorer is required!");
}
int.TryParse(version.ToString().Split('.')[0], out browserVersion);
}
//如果小于7
if (browserVersion < 7)
{
throw new ApplicationException("不支持的浏览器版本!");
}
return browserVersion;
}
/// <summary>
/// 通过版本得到浏览器模式的值
/// </summary>
/// <param name="browserVersion">浏览器版本</param>
/// <returns>浏览器模式值</returns>
public static UInt32 GeoEmulationModee(int browserVersion)
{
UInt32 mode = 11000; // DOCTYPE指令在IE11标准模式下显示。.
switch (browserVersion)
{
case 7:
mode = 7000; // Internet Explorer 7.
break;
case 8:
mode = 8000; // Internet Explorer 8.
break;
case 9:
mode = 9000; // Internet Explorer 9.
break;
case 10:
mode = 10000; // Internet Explorer 10.
break;
case 11:
mode = 11000; // Internet Explorer 11.
break;
}
return mode;
}
}
}

调用:

  public partial class FrmWebBrowser : Form
{
public FrmWebBrowser()
{
InitializeComponent();
//获取浏览器版本
int browserVersion = SetWebBrowser.GetBrowserVersion();
//也可以直接输入调用的版本,例如调用IE11: SetWebBrowser.SetWebBrowserFeatures(11);
//修改注册表兼容当前程序
SetWebBrowser.SetWebBrowserFeatures(browserVersion);
}
}

最新文章

  1. mongodb在java中的查询
  2. SQL Server 跨网段(跨机房)FTP复制
  3. SQL表新增触发(触发器)
  4. Forwards on Weibo (30)
  5. NoSuchMethodException问题总结
  6. DS实验题 order
  7. 【转】Spark快速入门指南
  8. (六)6.13 Neurons Networks Implements of stack autoencoder
  9. 百度UEditor组件出现Parameters: Invalid chunk &amp;#39;&amp;#39; ignored警告的分析
  10. 关于AutoCAD.NET的辅助方法
  11. KISSY对vm的抽取
  12. 一些Wifi破解姿势
  13. javascript 函数详解
  14. hive编程指南——读书笔记(无知拾遗)
  15. SpringBoot cache-control 配置静态资源缓存 (以及其中的思考经历)
  16. Spring提供的用于访问Rest服务的客户端:RestTemplate实践
  17. ubuntu 安装 npm、nodejs 各种问题
  18. 从零开始学习iftop流量监控(找出服务器耗费流量最多的ip和端口)
  19. 20165213 Exp5 MSF基础应用
  20. MVC架构介绍——自运行任务

热门文章

  1. Socket 网络编程和IO模型
  2. 【多线程】不懂什么是 Java 中的锁?看看这篇你就明白了!
  3. 用宏实现HEX到ASCII ,ASCII 到HEX
  4. Mysql慢查询explain
  5. Java中Byte类型数据在运算中的问题
  6. 使用dom4j工具:XMLWriter写出文件(五)
  7. JAVA中直接用Jdbc就能操作数据库了,为什么还要用spring框架?
  8. Redis笔记(一)
  9. rasa form的中断形式 自然机器语言学习 人工智能
  10. MySQL修改配置文件 避免中文乱码