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 相关文章推荐
JavaScript修改css样式style
Apr 15 Javascript
封装好的js判断操作系统与浏览器代码分享
Jan 09 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
JS实现跟随鼠标的链接文字提示框效果
Aug 06 Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
JavaScript判断输入是否为数字类型的方法总结
Sep 28 Javascript
angular实现input输入监听的示例
Aug 31 Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 Javascript
Vue中this.$nextTick的作用及用法
Feb 04 Javascript
用VsCode编辑TypeScript的实现方法
May 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和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
2015/08/11 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
layer插件select选中默认值的方法
2018/08/14 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
python如何写出表白程序
2020/06/01 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
岗位廉洁从业承诺书
2014/03/28 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
村级个人对照检查材料
2014/08/22 职场文书
学期个人工作总结
2015/02/13 职场文书
离婚答辩状范文
2015/05/22 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫