js中有关IE版本检测


Posted in Javascript onJanuary 04, 2012

见得最多的就是检测navigator.userAgent(这个可以面向所有浏览器,略过)。

另外一种就是IE的条件注释,这篇有个比较详细的说明 https://3water.com/article/29336.htm

<!--[if !IE]><!--> 
<script type="text/javascript"> 
alert('非IE') 
</ script> 
<!--<![endif]-->

我测试的结果是这种形式是可用的。唯一需要注意的是<!-- [if IE 8]> 中'IE'和'8'中间的这个空白符是必须的,掉了就悲剧了。

基于IE的条件注释,变种版本就有几种,
第一、类似下面的形式:

<!--[if IE 6]> 
<input type="hidden" id="ieVersion" value="6" /> 
<![endif]--> 
<!--[if IE 7]> 
<input type="hidden" id="ieVersion" value="7" /> 
<![endif]-->

var ieVersion = (function(){ return document.getElementById('ieVersion')})();

以此类推,可以获得各个版本的信息,甚至可以添加gt,gte等,从而一次判定一类版本。
关于这种写法,有个例子就是:
<!--[if IE 6]> 
<html class="ie6"> 
<![endif]--> 
<!--[if IE 7]> 
<html class="ie7"> 
<![endif]--> 
<!--[if !IE]><!--> 
<html><!--<![endif]-->

于是在CSS里面就可以不用别的hack了,从而避免在IE里面多加载一次CSS,
直接
.ie6 xx{} 
.ie7 xx{} 
.ie8 xx{} 
xx{}

第二、既然可以写在页面内,当然也可以JS来动态生成。我google了一把,发现还真有人这么做的。
文章地址如下:https://3water.com/article/29337.htm,写得还比较详细,原理也很简单。
不过这样的缺憾就是把条件注释限定到JS上了,于CSS就是鸡肋了。
继续,既然可以动态生成条件注释来辨明IE版本,基于IE的CSS hack,应该也可以动态生成一段html片段,用样式值来判定版本。
下面是最容易想到的形式,我测试发现这么确实可以,不过也发现了一个问题,看下面的一段代码:
<div id="test_1"><span style="color: red; color: #ff6600\0; color: yellow\9\0; *color:green; _color:blue;">测试</span></div> 
<script type="text/javascript"> 
var test_1 = document.getElementById('test_1'); 
var test_2 = document.createElement('div'); 
test_2.innerHTML = '<span style="color: red; color: #ff6600\\0; color: yellow\\9\\0; *color:green; _color:blue;">测试</span>'; 
console.log('test_1:' + test_1.firstChild.style.color + '----' + 'test_2:' + test_2.firstChild.style.color); 
</script>

在IE9下结果:LOG: test_1:yellow----test_2:yellow
在IE8下结果:LOG: test_1:#ff6600----test_2:#ff6600
在IE7下结果:LOG: test_1:green----test_2:blue
在IE6下结果:test_1:blue ----test_2:blue (IE6没有console.log,所以上面的console.log需要换成alert)

上面的问题大家应该看出来了,IE7下两种情况不一致,不知道是我的IE7兼容模式的问题还是别的什么原因,知道的请指教。
确认代码:

<div><span style="*color:red; _color:blue;">原始</span></div> 
<script> 
var test = document.createElement('div'); 
test.innerHTML = '<span style="*color:red; _color:blue;">动态生成</span>'; 
document.body.appendChild(test); 
</script>

IE7结果:

js中有关IE版本检测

IE6结果:

js中有关IE版本检测

基本原理和IE的条件注释差不多,我们一次检测color值就可以了,所以改变一下上面的例子就是:
<div id="test_1"><span style="color: red; color: #ff6600\0; color: yellow\9\0; *color:green; _color:blue;">测试</span></div> 
<script type="text/javascript"> 
var test_1 = document.getElementById('test_1'); 
//var test_2 = document.createElement('div'); 
//test_2.innerHTML = '<span style="color: red; color: #ff6600\\0; color: yellow\\9\\0; *color:green; _color:blue;">测试</span>'; 
var c = test_1.firstChild.style.color; 
alert(c=='red'?'other':c=='yellow'?'IE9':c=='#ff6600'?'IE8':c=='green'?'IE7':'IE6'); 
</script>

在IE9下结果:IE9
在IE8下结果:IE8
在IE7下结果:IE7
在IE6下结果:IE6

按理来说,对于FF,Chrome/Safari、opera都可以利用-moz、-webkit、-o等私有前缀来辨别,不过对于属性的选取要斟酌,类似color是不行的。
这个检测方法旁门左道而已,未来版本或者其他浏览器是不是有这个bug也不确定,而且IE7的那个bug我还没有弄清楚,所以也就暂时知道可以这么做就可以了。

Javascript 相关文章推荐
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
Nov 04 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
Mar 16 Javascript
js正则匹配出所有图片及图片地址src的方法
Jun 08 Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 Javascript
jQuery中delegate()方法的用法详解
Oct 13 Javascript
jQuery中table数据的值拷贝和拆分
Mar 19 Javascript
javascript内存分配原理实例分析
Apr 10 Javascript
微信小程序之购物车功能
Sep 23 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
Sep 27 Javascript
JavaScript之实现一个简单的Vue示例
Jan 17 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
Apr 28 Javascript
JS实现页面跳转与刷新的方法汇总
Aug 30 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
Jan 04 #Javascript
IE的有条件注释判定IE版本详解(附实例代码)
Jan 04 #Javascript
js变量以及其作用域详解
Jul 18 #Javascript
分享一个asp.net pager分页控件
Jan 04 #Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 #Javascript
DOM和XMLHttpRequest对象的属性和方法整理
Jan 04 #Javascript
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
Jan 03 #Javascript
You might like
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
php 过滤危险html代码
2009/06/29 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
php 伪静态之IIS篇
2014/06/02 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
JS中toFixed()方法引起的问题如何解决
2012/11/20 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
js控制一个按钮是否可点击(可使用)disabled的实例
2017/02/14 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
vue-cli设置css不生效的解决方法
2020/02/07 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
Python读取mp3中ID3信息的方法
2015/03/05 Python
python执行使用shell命令方法分享
2017/11/08 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
物流管理专业求职信
2014/05/29 职场文书
股权转让协议范本
2014/12/07 职场文书