重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
其实360的兼容模式就是调用了IE内核,判断浏览器类型的代码应该足可以使用了,至于你要求不用JS脚本,用JAVA这大概实现不了,你浏览器内核的切换,只有前端脚本才有可能知道,后台代码不可能第一时间知道,要知道也是前端告诉后端才对啊
创新互联公司专业为企业提供商州网站建设、商州做网站、商州网站设计、商州网站制作等企业网站建设、网页设计与制作、商州企业网站模板建站服务,10余年商州做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
这个在你的JS代码里面就要判断浏览器兼容性的问题,
代码有点多 这里就不贴代码了。
通过request头信息是可以获得浏览器的agent信息的,然后直接将firefox或者inter exploer作为关键词进行模糊匹配即可实现判断用户浏览器类型的需求。
Java判断浏览器版本与类型
public static void main(String[] args) {
String agent=request.getHeader("User-Agent").toLowerCase();
System.out.println(agent);
System.out.println("浏览器版本:"+getBrowserName(agent));
}
/**
* 获取浏览器版本信息
* @Title: getBrowserName
* @data:2015-1-12下午05:08:49
* @author:wolf
*
* @param agent
* @return
*/
public String getBrowserName(String agent) {
if(agent.indexOf("msie 7")0){
return "ie7";
}else if(agent.indexOf("msie 8")0){
return "ie8";
}else if(agent.indexOf("msie 9")0){
return "ie9";
}else if(agent.indexOf("msie 10")0){
return "ie10";
}else if(agent.indexOf("msie")0){
return "ie";
}else if(agent.indexOf("opera")0){
return "opera";
}else if(agent.indexOf("opera")0){
return "opera";
}else if(agent.indexOf("firefox")0){
return "firefox";
}else if(agent.indexOf("webkit")0){
return "webkit";
}else if(agent.indexOf("gecko")0 agent.indexOf("rv:11")0){
return "ie11";
}else{
return "Others";
}
}
原文链接:
JavaScript是前端开发的主要语言,我们可以通过编写JavaScript程序来判断浏览器的类型及版本。JavaScript判断浏览
器类型一般有两种办法,一种是根据各种浏览器独有的属性来分辨,另一种是通过分析浏览器的userAgent属性来判断的。在许多情况下,值判断出浏览器
类型之后,还需判断浏览器版本才能处理兼容性问题,而判断浏览器的版本一般只能通过分析浏览器的userAgent才能知道。
navigator对象
包含了正在使用的 Navigator 的版本信息。 JavaScript 客户端运行时刻引擎自动创建 navigator 对象。 详细的介绍可以参照【】,这里只是简单说下其属性和方法。
属性概览
appCodeName 指定浏览器的代码名称。
appName 指定浏览器的名称。
appVersion 指定 Navigator 的版本信息。
language 标明正在使用的 Navigator 的翻译语种。
mimeTypes 客户端支持的所有 MIME 类型数组。
platform 标明了 Navigator 编译适合的机器类型。
plugins 客户端已安装的所有插件数组。
userAgent 指定了用户代理头。
方法概览
javaEnabled 测试是否允许 Java。
plugins.refresh 使新安装的插件有效,并可选重新装入已打开的包含插件的文档。
preference 允许一个已标识的脚本获取并设置特定的 Navigator 参数。
taintEnabled 指定是否允许数据污点。
简单标注一下,判断浏览器的名称可以根据appName判断,例如:
var ie=navigator.appName == “Microsoft Internet Explorer” ? true : false;
浏览器的特征及其userAgent
关于各种浏览器的特征及其userAgent,可以参照【】,这篇文章介绍的比较详细。
简单罗列如下:
IE
只有IE支持创建ActiveX控件,因此她有一个其他浏览器没有的东西,就是ActiveXObject函数。
而IE各个版本典型的userAgent如下:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)
其中,版本号是MSIE之后的数字。
Firefox
Firefox中的DOM元素都有一个getBoxObjectFor函数,用来获取该DOM元素的位置和大小(IE对应的中是getBoundingClientRect函数)。
这是Firefox独有的,判断它即可知道是当前浏览器是Firefox。
Firefox几个版本的userAgent大致如下:
Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12 其中,版本号是Firefox之后的数字。
Opera
Opera提供了专门的浏览器标志,就是window.opera属性。
Opera典型的userAgent如下:
Opera/9.27 (Windows NT 5.2; U; zh-cn)
Opera/8.0 (Macintosh; PPC Mac OS X; U; en)
Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0
其中,版本号是靠近Opera的数字。
Safari
Safari浏览器中有一个其他浏览器没有的openDatabase函数,可做为判断Safari的标志。
Safari典型的userAgent如下:
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13
Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3
其版本号是Version之后的数字。
Chrome
Chrome有一个MessageEvent函数,但Firefox也有。不过,好在Chrome并没有Firefox的getBoxObjectFor函数,根据这个条件还是可以准确判断出Chrome浏览器的。
目前,Chrome的userAgent是:
Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
其中,版本号在Chrome之后的数字。
有趣的是,Chrome的userAgent还包含了Safari的特征,也许这就是Chrome可以运行所有Apple浏览器应用的基础吧。
Navigator
目前,Navigator的userAgent是:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6
其中,版本号在Navigator之后的数字。
通过观察以上各浏览器的差异,可以用JavaScript区分出各浏览器的,但没有判断是否兼容w3c标准,看了看ExtJs的源代码,发现其中就有对浏览器类型以及版本和操作系统的判断。
源码如下:
ua = navigator.userAgent.toLowerCase(),
check = function(r){
return r.test(ua);
},
isStrict = patMode == “CSS1Compat”,
isOpera = check(/opera/),
isChrome = check(/chrome/),
isWebKit = check(/webkit/),
isSafari = !isChrome check(/safari/),
isSafari3 = isSafari check(/version\/3/),
isSafari4 = isSafari check(/version\/4/),
isIE = !isOpera check(/msie/),
isIE7 = isIE check(/msie 7/),
isIE8 = isIE check(/msie 8/),
isGecko = !isWebKit check(/gecko/),
isGecko3 = isGecko check(/rv:1\.9/),
isBorderBox = isIE !isStrict,
isWindows = check(/windows|win32/),
isMac = check(/macintosh|mac os x/),
isAir = check(/adobeair/),
isLinux = check(/linux/)
关于patMode
IE对盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在Standards Mode下对于盒模型的解释和其他的标准浏览器是一样,但在Quirks Mode模式下则有很大差别,而在不声明Doctype的情况下,IE默认又是Quirks Mode。所以为兼容性考虑,我们可能需要获取当前的文档渲染方式。
patMode正好派上用场,它有两种可能的返回值:BackCompat和CSS1Compat,对其解释如下:
BackCompat Standards-compliant mode is not switched on. (Quirks Mode)
CSS1Compat Standards-compliant mode is switched on. (Standards Mode)
在实际的项目中,我们还需要在获取浏览是否IE,这样就可以得到IE的渲染模式了。在ExtJs中的代码:isBorderBox=isIE!isStrict。
当文档有了标准声明时, patMode 的值就等于 “CSS1compat”, 因此, 我们可以根据 patMode 的值来判断文档是否加了标准声明
var height = patMode==”CSS1Compat” ? document.documentElement.clientHeight : document.body.clientHeight;