如果电脑上安装了IE8或者之后版本的IE浏览器,在Visual Studio Webbrowser控件默认使用IE7兼容模式来显示网页内容。解决方法是在注册表中为你的进程指定引用IE的版本号。
比如我的程序叫做a.exe
对于32位Windows OS操作系统:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
对于64位Windows OS操作系统
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
在对应的路径下添加你程序名字,如a.exe为名的value,DWORD值。
10000(0×2710) IE10
9999 (0x270F) IE9 忽略html5
9000 (0×2328) IE9
8888 (0x22B8) IE8 忽略html5
8000 (0x1F40) IE8
7000 (0x1B58) IE7
但是经过我们测试,DWORD值设置为0或者15000时,IE都指定的是本机安装的IE版本,如果版本是IE11则Webbrowser控件就用的是IE11。
/*
*@desc判断浏览器的版本以及浏览器内核
*@authorwangyanling
*@date7月4日
*/
varbrowser=function(){
varagent=navigator.userAgent.toLowerCase(),
opera=window.opera,
browser={
//检测当前浏览器是否为IE
ie:/(msie\s|trident.*rv:)([\w.]+)/.test(agent),
//检测当前浏览器是否为Opera
opera:(!!opera&&opera.version),
//检测当前浏览器是否是webkit内核的浏览器
webkit:(agent.indexOf('applewebkit/')>-1),
//检测当前浏览器是否是运行在mac平台下
mac:(agent.indexOf('macintosh')>-1),
//检测当前浏览器是否处于“怪异模式”下
quirks:(patMode=='BackCompat')
};
//检测当前浏览器内核是否是gecko内核
browser.gecko=(navigator.product=='Gecko'&&!browser.webkit&&!browser.opera&&!browser.ie);
varversion=0;
//InternetExplorer6.0+
if(browser.ie){
varv1=agent.match(/(?:msie\s([\w.]+))/);
varv2=agent.match(/(?:trident.*rv:([\w.]+))/);
if(v1&&v2&&v1[1]&&v2[1]){
version=Math.max(v1[1]*1,v2[1]*1);
}elseif(v1&&v1[1]){
version=v1[1]*1;
}elseif(v2&&v2[1]){
version=v2[1]*1;
}else{
version=0;
}
//检测浏览器模式是否为IE11兼容模式
browser.ie11Compat=document.documentMode==11;
//检测浏览器模式是否为IE9兼容模式
browser.ie9Compat=document.documentMode==9;
//检测浏览器模式是否为IE10兼容模式
browser.ie10Compat=document.documentMode==10;
//检测浏览器是否是IE8浏览器
browser.ie8=!!document.documentMode;
//检测浏览器模式是否为IE8兼容模式
browser.ie8Compat=document.documentMode==8;
//检测浏览器模式是否为IE7兼容模式
browser.ie7Compat=((version==7&&!document.documentMode)||document.documentMode==7);
//检测浏览器模式是否为IE6模式或者怪异模式
browser.ie6Compat=(version
browser.ie9above=version>8;
browser.ie9below=version
}
//Gecko.
if(browser.gecko){
vargeckoRelease=agent.match(/rv:([\d\.]+)/);
if(geckoRelease){
geckoRelease=geckoRelease[1].split('.');
version=geckoRelease[0]*10000+(geckoRelease[1]||0)*100+(geckoRelease[2]||0)*1;
}
}
//检测当前浏览器是否为Chrome,如果是,则返回Chrome的大版本号
if(/chrome\/(\d+\.\d)/i.test(agent)){
browser.chrome=+RegExp['\x241'];
}
//检测当前浏览器是否为Safari,如果是,则返回Safari的大版本号
if(/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(agent)&&!/chrome/i.test(agent)){
browser.safari=+(RegExp['\x241']||RegExp['\x242']);
}
//Opera9.50+
if(browser.opera)
version=parseFloat(opera.version());
//WebKit522+(Safari3+)
if(browser.webkit)
version=parseFloat(agent.match(/applewebkit\/(\d+)/)[1]);
//检测当前浏览器版本号
browser.version=version;
returnbrowser;
}();
在MFC程序中嵌入浏览器控件都是IE内核,但不同客户端IE版本不同将会导致WEB网页的兼容问题。为了解决该问题,可以使用WebKit的链库,主要是针对嵌入Chrome浏览器控件。可在/cef_downloads/下载相应的库。更多资料可参见CEF中文教程(google chrome浏览器控件) -- CEF简介,/article/p-voowgrbk-rw.html