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 相关文章推荐
event.srcElement 用法笔记e.target
Dec 18 Javascript
jQuery学习笔记之jQuery的事件
Dec 22 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
javascript实现数字验证码的简单实例
Feb 10 Javascript
javascript中函数作为参数调用的方法
Feb 09 Javascript
iframe中子父类窗口调用JS的方法及注意事项
Aug 25 Javascript
基于Javascript实现返回顶部按钮
Feb 29 Javascript
第九章之路径分页标签与徽章组件
Apr 25 Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 jQuery
微信小程序实现登录遮罩效果
Nov 01 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
Apr 04 Javascript
JsonProperty 的使用方法详解
Oct 11 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
通过对服务器端特性的配置加强php的安全
2006/10/09 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
laravel学习教程之关联模型
2016/07/30 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
jQuery取id有.的值的方法
2014/05/21 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
浅析Jquery操作select
2016/12/13 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
React中的render何时执行过程
2018/04/13 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
详解Python的Django框架中的模版相关知识
2015/07/15 Python
Python 专题四 文件基础知识
2017/03/20 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
八一建军节部队活动方案
2014/02/04 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
《跨越百年的美丽》教学反思
2014/02/11 职场文书
英语老师推荐信
2014/02/26 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL