设置WebBrowser内核渲染模式

前不久开发一个项目,是采用WebBrowser作为外壳,加载网页,由于网页是采用html5来进行开发的,当通过WebBrowser加载网页后,html5中的特性

都无法正常显示,而通过ie浏览器打开时能够正常显示,经过研究发现WebBrowser默认是通过ie7的兼容模式来进行渲染,因此html5的特性无法显示。那么

我们该如何更改WebBrowser内核的渲染模式呢?

Internet Explorer Architecture

首先了解一下IE的整个架构,如下图

ShDocVw 及以下就是WebBrowser的内容,而Browser UI和IE自己的一些特有的功能不属于WebBrowser所有。
当然,不是说要做自己的基于IE的浏览器

就非得用WebBrowser, 我们完全可以直接使用 MSHTML 去控制和绘制DOM,跳过WebBrowser。

不少软件都内嵌了IE的WebBrowser控件(也就是MSHTML.dll)来显示网页, 当用户机器升级到某个IE版本时,
WebBrowser控件也会随之升级到相应的

IE版本对应的渲染引擎。为了保证这些使用WebBrowser控件的应用软件能够工作起来和原来一样,不同IE版本的WebBrowser控件在默认情况下使用了IE7

渲染模式。

设置WebBrowser渲染模式

如下,一个WebBrowser加载一个为w3school的网页,其中包含一个video标签,IE默认情况下是使用IE7兼容模式渲染,预期是video是无法显示的。




<Grid>

<WebBrowser
Source="http://www.w3school.com.cn/tiy/t.asp?f=html5_video_dom"></WebBrowser>

</Grid>

运行效果如下:

提示"Your browser does not support HTML5
video",说明WebBrowser中默认不是采用本地机器IE版本对应的模式来渲染的,接下来我们通过修改注册表,来使

WebBrowser支持HTML5的属性,既采用更高ie版本的内核来进行渲染。

修改注册表设置WebBrowser内核的渲染模式

1、安装包在安装的时候,先从注册表里获取到系统的IE 版本号,如果是 IE 8
以下,就跳过本逻辑。版本号的获取可以从这里读取:
32位系统:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet
Explorer\Version
64位系统:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet
Explorer\Version

2、在注册表对应的位置创建键值,键为用到 web browser 控件的程序的名称,例如 WebBrowser.exe
(不需要完整的路径,带扩展名的完整文件名就可以了),值

为第一步获取到的版本值。MSDN 上显示一共有 9
个枚举值(http://msdn.microsoft.com/en-us/library/ee330730%28v=vs.85%29.aspx#browser_emulation),可以根据实际情

况来设置,例如
十进制的9。注册表的位置为:
32位系统:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet
Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

64位系统:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet
Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

示例代码




var exeName = Process.GetCurrentProcess().ProcessName + ".exe";
var hklm = Registry.LocalMachine;

try
{
  var lmRun = hklm.OpenSubKey( @"SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl

FEATURE_BROWSER_EMULATION", true);
  if (lmRun != null)

{
    try

{
      lmRun.SetValue(exeName, 0x2710); //设置webbrowser调用IE10内核打开
    }
    catch (Exception ex)
   
{
      Console.Write(ex.Message);
  
}
 
}
}

修改注册表之后运行效果如下:

说明大功告成了!

时间: 2024-10-24 22:00:01

设置WebBrowser内核渲染模式的相关文章

设置UIImage的渲染模式:UIImage.renderingMode

着色(Tint Color)是iOS7界面中的一个.设置UIImage的渲染模式:UIImage.renderingMode重大改变,你可以设置一个UIImage在渲染时是否使用当前视图的Tint Color.UIImage新增了一个只读属性:renderingMode,对应的还有一个新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚举值来设置图片的renderingMode属性.该枚举中包含下列值: UIImageRenderingMod

iOS UITabBarItem 选中图的颜色,设置UIimage的渲染模式

UITbarController之前有在这篇文章讲解:http://www.cnblogs.com/niit-soft-518/p/4447940.html 如果自定义了UITabBarItem的图片,用上述文章创建的时候,发现选中的图的边框颜色默认是蓝色的, 解决这个问题就需要设置 UIImage的渲染模式 imageWithRenderingMode 设置UIImage的渲染模式:UIImage.renderingMode 着色(Tint Color)是iOS7界面中的一个.设置UIImag

iOS设置tabBarItem.image图片渲染模式

self.tabBarItem.image=[[UIImage imageNamed:images[i]] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 设置UIImage的渲染模式:UIImageRenderingModeAlwaysOriginal // 始终显示图片原始状态,不使用Tint Color

设置Image渲染模式使用TintColor

通过使用控件Tint Color,例如UIImageView,UIButton等 设置UIImage的渲染模式,使你用一张图片可以渲染成不同颜色,例如设置UIImage的渲染模式:UIImage.renderingMode重大改变,你可以设置一个UIImage在渲染时是否使用当前视图的Tint Color.iOS7.0之后  UIImage有一个新增方法:imageWithRenderingMode: 通过它可以设置图片的渲染模式.其中参数部分UIImageRenderingMode 有3个枚举

WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下?

原文:WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下? 一.问题的提出 偶然发现,Winform里的WebBrowser和IE实际安装的版本似乎并不同步,很有趣! 下面有张图,里面一个窗口是用IE9打开某网站,另一个窗口是用Winform+WebBrowser打开同样的网站,有意思的事情出现了. 在IE9窗口中,这个网站左边菜单树无法显示,原因是IE9使用的技术较新,而网站使用的技术较旧,未能及时同步更新到支持IE9所致.该如何办呢? 微软在IE9中提供一个兼容

浏览器内核及渲染模式的介绍

首先要引入一个概念——排版引擎(Layout Engine,Rendering Engine),就是经常上网的人也许都听说过的浏览器内核,负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.各品牌浏览器的内核是不同的,不同的内核处理同一段代码的时候思路不同.因此可以说,浏览器间内核的差异是产生兼容性问题的根本原因.这就是我们苦逼前端工程师们经常希望浏览器大一统的原因了.当然这只是个梦,那好我们回归现实,下面我将对四种常用的浏览器内核进行简单的介绍.  Trident      

设置webbrowser浏览器内核

var hklm = Microsoft.Win32.Registry.LocalMachine;            var lmRun64 = hklm.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION", true);            var lmRun32 = hklm.OpenSubKey(@"

浏览器兼容性问题之渲染模式——1

兼容性问题 目前市面上流行的浏览器有多种,这些浏览器在处理一个相同的页面时,表现或行为有时会有差异.这种差异可能很小,甚至不会被注意到:也可能很大,甚至造成在某个浏览器下无法正常浏览.我们把引起这些差异的问题统称为“浏览器兼容性问题”. 浏览器的内核 各品牌浏览器的内核是不同的,不同的内核处理同一段代码的时候思路不同.因此可以说,浏览器间内核的差异是产生兼容性问题的根本原因. “内核”也称为“引擎”.常见的浏览器及其渲染引擎(又称排版引擎).脚本引擎的列表如下: Browser Name Lay

route-显示并设置Linux内核中的网络路由表

route命令 网络配置 route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现. 语法 route(选项)(参数) 选项 -A:设置地址类型: -C:打印将Linux核心的路由缓存: -v:详细信息模式: -n:不执行DNS反向查找,直接显示数字形式的IP地址: -e:netstat格式显示路由表: -net:到一个网络的路由表: -host:到一个主机的路