微软发布win8系统版IE11后win sp版和win server版的IE11也相继上架。但目前市面上很多PC网站仍不完全兼容IE11。此文仅谈JS验证浏览器版本的功能模块对IE11兼容问题。
一般,旧的JS验证浏览器版本的功能模块,例如。
<script type="text/javascript">
window.GLOBAL = { //浏览器版本信息
BROWSER : (function() {
var u = window.navigator.userAgent.toLocaleLowerCase(),
msie = /(msie) ([\d.]+)/,
chrome = /(chrome)\/([\d.]+)/,
firefox = /(firefox)\/([\d.]+)/,
safari = /(safari)\/([\d.]+)/,
opera = /(opera)\/([\d.]+)/,
b = u.match(msie)||u.match(chrome)||u.match(firefox)||u.match(safari)||u.match(opera);
return {NAME: b[1], VERSION: parseInt(b[2])};
})()
}
</script>
该验证模块是通过PC客户端上的用户代理头navigator.userAgent信息进行检测的。在IE版本检测部分,
通过:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)。中MSIE 6.0字段检测。但在IE11,取消了MSIE X.X 信息;所以该检测代码在IE11中会失效。
在取消MSIE X.X 信息后,IE11还存在从IE9引入的Trident标识;这样可以直接通过Trident标识检测出IE11。
修改后JS验证浏览器版本的功能模块如下:
<script type="text/javascript">
window.GLOBAL = { //浏览器版本信息
BROWSER : (function() {
var u = window.navigator.userAgent.toLocaleLowerCase(),
msie = /(msie) ([\d.]+)/,
chrome = /(chrome)\/([\d.]+)/,
firefox = /(firefox)\/([\d.]+)/,
safari = /(safari)\/([\d.]+)/,
opera = /(opera)\/([\d.]+)/,
ie11 = /(trident)\/([\d.]+)/,
b = u.match(msie)||u.match(chrome)||u.match(firefox)||u.match(safari)||u.match(opera)||u.match(ie11);
return {NAME: b[1], VERSION: parseInt(b[2])};
})()
}
</script>