Windows浏览器控件兼容性设置 以及内核选择

在开发Windows应用程序时,遇到浏览器控件在兼容模式下显示问题。为确保页面正常,通过设置注册表FEATURE_BROWSER_EMULATION键值,将WebBrowser控件设置为8.0渲染模式,即dword 8000。这将使控件以IE8标准模式运行,避免兼容性问题。可通过修改'HKEY_CURRENT_USERSoftwareMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION'下的应用程序键值来实现。代码示例展示了如何进行设置。
IE8 浏览器存在两种模式,一种是兼容模式,一种是标准模式。所谓的兼容模式是为了兼容之前的网页。(微软以前不靠谱,非不按照规矩来办事。现在浪子回头了,只好搞个兼容模式来解决。)

在开发项目的时候,用到了浏览器控件,页面在兼容模式下有问题,标准模式下没有问题。为了绝对不能出问题,我就需要在程序中强行设置浏览器控件打开网页页面时用标准模式。WebBrowser控件的渲染模式可以通过设置注册表FEATURE_BROWSER_EMULATION 来实现。


[(HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"YourApplication.exe" = dword 8000 (Hex: 0x1F40)

这里YourApplicaiton.exe 是你的应用程序的EXE文件名。 8000 表示8.0的渲染模式,请对照下表:


IE8 Standards Mode   8000 (0x1F40)  -- IE8 标准模式 (Standard Mode), IE8默认的模式

IE8 Standards Mode (Forced)  8888 (0x22B8) -- IE8 强制标准模式,在渲染失败的情况下不尝试用兼容视图模式

IE7 Standards Mode   7000 (0x1B58)  -- IE7 兼容视图模式 (Compatible View), IE8的WebBrowser控件默认模式


例子代码:

以下代码设置浏览器控件需要的浏览器版本号并且强制使用标准模式。


char* old_locale = _strdup( setlocale(LC_ALL,NULL) );    
 setlocale( LC_ALL, "chs" ); 

DWORD dword = 8888;
 WCHAR buffer[MAX_PATH] = {0};
 GetModuleFileName(GetModuleHandle(0), buffer, MAX_PATH);
 CString strexename = PathFindFileName(buffer);
 HRESULT hr = ::SHSetValue(HKEY_CURRENT_USER,L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION",strexename,REG_DWORD,&dword,sizeof(dword));
 hr = ::SHSetValue(HKEY_LOCAL_MACHINE,L"Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION",strexename,REG_DWORD,&dword,sizeof(dword));


部分内容参考:http://blog.youkuaiyun.com/wingeek/article/details/4022102


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值