WebBrowser 设置IE兼容性

2023-11-17

在窗体应用程序和wpf程序中会使用到WebBrowser 来显示一个网页,但是可能要显示的网页要求在特定的模式下运行,因此需要调整WebBrowser 对网页兼容性的设置;

通过在注册表中设置HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION中添加一个值,该值指示该程序以什么模式来运行IE

代码如下(下面代码是复制别人,在这里是为了方便查找,有一些看不懂)

 /// <summary>
        /// 修改注册表信息来兼容当前程序
        /// 
        /// </summary>
        static void SetWebBrowserFeatures(int ieVersion)
        {
            // don't change the registry if running in-proc inside Visual Studio
            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);
            // enable the features which are "On" for the full Internet Explorer browser
            //不晓得设置有什么用
            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></returns>
        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>
        static UInt32 GeoEmulationModee(int browserVersion)
        {
            UInt32 mode = 11000; // Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 Standards mode. 
            switch (browserVersion)
            {
                case 7:
                    mode = 7000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. 
                    break;
                case 8:
                    mode = 8000; // Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. 
                    break;
                case 9:
                    mode = 9000; // Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.                    
                    break;
                case 10:
                    mode = 10000; // Internet Explorer 10.
                    break;
                case 11:
                    mode = 11000; // Internet Explorer 11
                    break;
            }
            return mode;
        }

在使用WebBrowser显示一个兼容性要求的网页时,修改SetWebBrowserFeatures方法中后再显示一个网页即可,ieVersion为要兼容的IE的版本


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebBrowser 设置IE兼容性 的相关文章

  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • 如何使用T4从一个模板同时生成两个文件?

    我遇到的情况是 我需要生成两个 CSharp 代码文件 它们的代码几乎相同 但方法的输入和输出类型的命名空间不同 事实上 每个文件都针对特定国家 地区 并且类型来自特定国家 地区的 WSDL 我正在围绕服务编写一些包装器 逻辑完全相同 但从
  • 如何从经过身份验证的 SecurityToken 中获取声明

    我将令牌作为字符串传递到 SOAP 服务中 并验证了该令牌是否有效 我现在有一个 SecurityToken 在调试模式下我可以看到所有声明 特别是我想传递到另一个方法的 userId 声明 我似乎不知道如何获得这些索赔 现在 我解码了令牌
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 如何在 C# 中以编程方式将行添加到 DataGrid?

    正如标题所述 我正在尝试使用 C 以编程方式将行添加到 DataGrid 但我似乎无法使其工作 这是我到目前为止所拥有的 I have a DataGrid declared as dg in the XAML foreach string
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 如何在 Linux 上重新实现(或包装)系统调用函数?

    假设我想完全接管 open 系统调用 也许要包装实际的系统调用并执行一些日志记录 一种方法是使用 LD PRELOAD http scaryreasoner wordpress com 2007 11 17 using ld preload
  • 从图像创建半透明光标

    是否可以从图像创建光标并使其半透明 我目前正在拍摄自定义图像并覆盖鼠标光标图像 如果我可以将其设为半透明 那就太好了 但不是必需的 销售人员喜欢闪亮的 目前正在做这样的事情 Image cursorImage customImage Get
  • C# 可以为控制台应用程序部分类“程序”类吗?

    我想知道是否可以将为任何控制台应用程序创建的默认 程序 类更改为部分类 我想这样做是因为我想要更好的组织 而不是将所有方法都放在按区域分类的 1 个文件中 对我来说 将某些方法类别放在单独的文件中会更有意义 我对分部类的理解是 它是多个文件
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • Clang 5.0 上的 vsprintf 和 vsnprintf [-Wformat-nonliteral] 警告

    我有这段代码 static void err doit int errnoflag int level const char fmt va list ap int errno save unsigned long n char buf MA
  • g++ / gcc 是否支持 C++20 新的atomic_flag 功能?

    根据参考参数 https en cppreference com w cpp atomic atomic flag c 20 有丰富的 对我来说有用的 支持atomic flag运营 然而 目前尚不清楚 gcc 是否支持这些功能 它们在任何
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题
  • 使用通用存储库模式和流畅的 nHibernate

    我目前正在开发一个中型应用程序 它将访问不同站点上的 2 个或更多 SQL 数据库等 我正在考虑使用类似的东西 http mikehadlow blogspot com 2008 03 using irepository pattern w
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • 如何使用 Microsoft Graph API 更新 MailboxSettings

    我想从不同的日历更新邮箱设置 如何构建可以通过 Microsoft Graph 更新 MailboxSetting 的请求 这是我的代码示例 但有例外 代码示例 User obj GraphServiceClient Users roomC

随机推荐

  • Spring Boot Admin 监控告警

    Spring Boot Admin 监控告警 要进行监控 需要两个Project 一个是Admin Server端 负责监控Spring boot的项目 另一个是Admin Client端 是被监控的Spring boot服务 当然也可以一
  • Android优化

    一 布局优化 布局优化就是删除布局中无用的控件和层级 可以用Hierarchy Viewer工具来检测 其次有选择地使用性能较低的ViewGroup include标签 include标签只支持以android layout开头的属性 比如
  • Synchronized的三种写法

    文章目录 前言 一 synchronized是什么 二 synchronized的三种写法 1 同步代码块 2 在实例方法上使用synchronized 3 在静态方法上使用synchronized 总结 前言 总结一下自己在学习Synch
  • STA——multicycle path

    目录 0 多周期路径 1 发射时钟和捕获时钟相同 2 发射时钟和捕获时钟不同 3 examples 之前去地平线面试的时候被问到了multicycle path的一点问题 其实这个问题我应该知道 看过 Constraining Design
  • 【Linux】Linux Centos 7.6 离线RPM安装NTP(时间同步)服务器及基本配置

    文章目录 1 概述 2 安装 2 1 查看服务器 2 2 安装NTPDATE NTP服务 2 3 NTP相关配置 2 4 启动 20230118日 22点13分回到家 3年后第一次回家 发个博客纪念一下 1 概述 一个环境 因为需要需要nt
  • 语义分割之 数据标注

    语义分割之 数据标注 一 标注工具 二 Labelme 安装和启动 1 安装 2 启动 三 标注与保存 1 打开图像 2 标注 3 保存 4 修改 四 多类别标注 五 快捷键 数据标注的目的是为了在监督学习中告诉机器哪些东西是属于哪个类别或
  • 个人阅读的Deep Learning方向的paper整理

    http hi baidu com chb seaok item 6307c0d0363170e73cc2cb65 个人阅读的Deep Learning方向的paper整理 分了几部分吧 但有些部分是有交叉或者内容重叠 也不必纠结于这属于D
  • 《Stable Diffusion web UI ControlNet模型下载及使用》

    ControlNet模型下载 本来是很简单一两分钟搞定的事情 但是作者搞了7次才终于出来这个页面 每次下载完以后看文件也是有 stable diffusion webui extensions sd webui controlnet 但是在
  • 运维知识各种链接

    转自 https www cnblogs com uglyliu p 6185943 html 运维知识各种链接 http linuxtools rst readthedocs io zh CN latest tool sar html l
  • Cocos2d-Lua(Quick-Cocos2d-x)集成第三方SDK(二)

    在上一篇文章中 我们介绍了 怎么集成友盟的Cocos2d x版本SDK 接下来我们来说下怎么将友盟的C 接口导出到Lua中使用 引擎版本 Quick Cocos2d x 3 3 开发系统 Windows 7 64bit 编写 tolua文件
  • OPANAS: One-Shot Path Aggregation Network Architecture Search for Object Detection论文阅读

    One Shot Path Aggregation Network Architecture Search for Object Detection 1 做了什么 1 此文提出了一种新的单次路径聚合网络结构搜索算法 显著提高了搜索效率和检测
  • VScode 调试python程序,debug状态闪断问题的解决方法

    0 Few words 之前一直在VSCode中debug C 和Python的程序没出过闪断的问题 但是最近在另一台电脑上debug 同样的方法 设置launch json和CMakeList加debug状态等等操作 如我另一篇blog写
  • Brew:command not found in Macbook

    1 zsh command not found brew 进入brew的工作目录 usr local一看 原来 usr local bin都没有了 难怪系统找不到brew这个命令 那么怎么办 最简单的办法就是重新安装Homebrew 1 r
  • 【coding】pandas返回文本序列长度及其描述性统计

    coding pandas返回文本序列长度及其描述性统计 文本长度统计 pandas时不要盲目的使用for loop 费时费力 要熟练掌握pandas提供的内置函数 df len a df a str len 返回的df len a本身也是
  • echarts tootip点击显示 移开不消失

    描述 tooltip点击时显示 依赖不会自动消失 tooltip上有按钮可以点击 可以这样修改 使用tooltip的triggerOn属性 tooltip triggerOn string default mousemove click 提
  • 【unityVR】关于Oculus如何连接unity编译器,无需打包就可以看到场景的教程

    前言 几天的碰壁 没有白费 可以说光是做一个能让让Oculus跑起来的demo这个过程中 几乎是一个坑连着一个坑 国内教程不完善 google也有少量的坑 下面就开始吧 我尽量每一步都说详细点 切记 一定每一步都照做 我就是有些地方想偷懒
  • 【华为机试真题 Python】敏感字段加密

    目录 题目描述 输入描述 输出描述 参考示例 参考代码 机试介绍 写在最后
  • 天翼云登录逆向

    逆向网址 https m ctyun cn wap main auth login redirect 2Fmy 通过按F12抓包分析 加密的是password 在全局中搜索关键词password 通过断点分析进入Object方法中 通过观察
  • Linux中的虚拟化

    在信息大爆炸的今天 大数据 云计算孕育而生 随着计算机硬件的高速发展 单台计算机用途的单一化 在大规模的服务器机房中很多机器职责单一 有些只负责计算 有些只负责存储处理等 硬件的性能潜力不能被高效开发 于是虚拟化技术也由此被设计并开发出来
  • WebBrowser 设置IE兼容性

    在窗体应用程序和wpf程序中会使用到WebBrowser 来显示一个网页 但是可能要显示的网页要求在特定的模式下运行 因此需要调整WebBrowser 对网页兼容性的设置 通过在注册表中设置HKEY CURRENT USER Softwar