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 相关文章推荐
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
Node.js中的事件驱动编程详解
Aug 16 Javascript
javascript通过元素id和name直接取得元素的方法
Apr 28 Javascript
jquery超简单实现手风琴效果的方法
Jun 05 Javascript
JS延时器提示框的应用实例代码解析
Apr 27 Javascript
JavaScript中String对象的方法介绍
Jan 04 Javascript
angular中实现li或者某个元素点击变色的两种方法
Jul 27 Javascript
浅谈angular4实际项目搭建总结
Dec 01 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
JS设置自定义快捷键并实现图片上下左右移动
Oct 17 Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 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过滤表单提交的html等危险代码
2014/11/03 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
php 函数中静态变量使用的问题实例分析
2020/03/05 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
cument.execCommand()用法深入理解
2012/12/04 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
Python学习笔记之自定义函数用法详解
2019/06/08 Python
Python之pymysql的使用小结
2019/07/01 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python tqdm库的使用
2020/11/30 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
毕业自我评价
2014/02/05 职场文书
Oracle笔记
2021/04/05 Oracle
python代码实现备忘录案例讲解
2021/07/26 Python
Vue的过滤器你真了解吗
2022/02/24 Vue.js