预备知识:NodeList的实时性

通过 document.getElementsByTagName,document.forms ,document.images  等方法获取到nodelist以后  里面的内容会适时的更新 这一点区别与array

我们利用它和条件注释来检测oldIE的版本

我认为 这是最靠谱的方法

--------------------------------华丽的分割线 请听我娓娓道来------------------------------------

搞前端的一大痛苦就是要搞定各个浏览器. 在这个问题上最牛逼最烦最装逼最可恶的要是ie大哥了.

不是ie的manager吃白饭,ie受制于操作系统的限制,不能随便升级 . ie永远做不了”版本帝”

但是ie9以后速度就很快了. win8.1上ie启动速度不亚于chrome

"浏览器能力检测优于浏览器检测”

if(!!document.addEventListener)//能力检测
{
alert('我可以通过document.addEventListener添加事件')
}

业界公认的观点.

但是有时候还是避免不了浏览器的检测 今天咱来说说ie大哥的检测

普遍的检测方法有以下几种

    1. userAgent

你的代码里 是不是有这样一句

var isIE6 = window.navigator.userAgent.indexOf('IE 6') > 0;                        // O(∩_∩)O哈哈~

我感觉这种方法最萌了

通常情况下 他不会有什么问题  但是看上去非常的屌丝(个人意见)

而且userAgent 这个属性我们可以更改的    百度一下 “更改useragent”

2. 怪癖检测

var isIE=!!window.ActiveXObject;
var isIE6=isIE&&!window.XMLHttpRequest;

var isIE8=isIE&&!!document.documentMode;

var isIE7=isIE&&!isIE6&&!isIE8;

通常我们仅支持到ie6   这样的代码到ie5下妥妥的挂掉

3.条件注释

varisIE6=false;

document.write("<!--[iflte IE6]><script>isIE6=true;</scr"+"ipt><![endif]-->");

if(isIE6){

alert('你当前的浏览器是IE6或者以下');

}

这样的方法很稳定 但是不优雅 而且写入了dom元素

小弟提供一种方法大家参考一下

咔咔上代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IEVersion</title>
<script> var IEVersion = (function () { //返回结果
var result = {
isIE: false, //是否ie
version: -1 //版本号
} //#region ie4_9
var _version = 3;//ie版本号 临时的
var ie4_9 = false; var odiv = document.createElement('div');
/*
目标元素
这个元素不需要append
在这个元素内插入ie条件注释 注释内包含一个标签 inner_element
*/
var inner_element = odiv.getElementsByTagName('i'); while (odiv.innerHTML = '<!--[if gt IE ' + (++_version) + ']><i></i><![endif]-->', inner_element[0]) {
ie4_9 = true;
}
//#endregion if (ie4_9 && (_version > 3 && _version <= 9)) {
result = { isIE: true, version: _version };
} else if (document.all) {
result = { isIE: true, version: 10 };
} else if ("ActiveXObject" in window) {
result = { isIE: true, version: 11 };
} return result;
})(); </script> <script> if (IEVersion.isIE) {
alert(IEVersion.version);
} </script> </head>
<body>
<!--[if IE 7]>所谓的双核浏览器的兼容模式会显示这个 因为他们跑的是ie7模式<![endif]-->
</body>
</html>

ps :

ie4-9 用条件注释来检测  新建的dom元素不需要插入到页面中

ie10不支持条件注释 但是ie10 支持document.all

ie11 就用("ActiveXObject" in window)来检测一下吧

有么问题欢迎大家讨论 O(∩_∩)O哈哈~

最好的ie版本检测方式的更多相关文章

  1. ios应用启动后的自动版本检测方式

    今天意外的发现了appstore居然还提供通过url获取json格式的客户端信息链接: http://itunes.apple.com/lookup?id=$id 通过此地址可以获取应用的icon.介 ...

  2. _1Python简介 安装及版本检测

    简介 Python是一种面向对象的解释性计算机程序设计语言,由荷兰人Guido von Rossum于1988年的圣诞节发明,第一个公开发行版于1991年. Python崇尚优美.清晰.简单,是一个优 ...

  3. Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!

    Android服务器--使用TomCat实现软件的版本检测,升级,以及下载更新进度! 算下来,TomCat服务器已经写了很长一段时间了,一直说拿他来搞点事 情,也一直没做,今天刚好有空,交流群还有人请 ...

  4. Dependabot 开始支持 pub package 版本检测

    今年年初,我们发布了 Flutter 2022 产品路线图,其中「基础设施建设」这部分提到:2022 年 Flutter 团队将增加对供应链的安全的投入,目的是达到符合基础设施 SLSA 4 级别中描 ...

  5. 通过adb方式给安卓手机截图的cmd批处理文件

    @echo off rem  通过adb方式截图rem  需要安装adb ,一般安装了android sdk 默认带了adb ,路径为sdk目录的android-sdk\platform-toolsr ...

  6. VisualVM通过jstatd方式远程监控远程主机

    配置好权限文件 [root@test bin]# cd $JAVA_HOME/bin [root@test bin]# vim jstatd.all.policy grant codebase &qu ...

  7. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  8. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  9. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

随机推荐

  1. jQuery 筛选器 链式编程操作

    $('#i1').next() 下一个标签$('#i1').nextAll() 兄弟标签中,所有下一个标签$('#i1').nextUntil('#ii1') 兄弟标签中,从下一个标签到id为ii1的 ...

  2. Sql Server Report Service 的部署问题(Reporting Service 2014為什麼不需要IIS就可以運行)

    http://www.cnblogs.com/syfblog/p/4651621.html Sql Server Report Service 的部署问题 近期在研究SSRS部署问题,因为以前也用到过 ...

  3. CentOS 7.4 初次手记:第四章 CentOS安全了解

    第四章 CentOS安全了解... 66 第一节 user.group.chmod. 66 I 10位文件属性... 66 II user/group增删改... 67 III user/group配 ...

  4. DS二叉树--Huffman编码与解码

    题目描述 1.问题描述 给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码. 构造Huffman树时,要求左子树根的权值小于.等于右子树根的权值. 进行Huffma ...

  5. Qt学习——QListWidget控件的使用

    转载:GDUTLYP Qt提供QListWidget类列表框控件用来加载并显示多个列表项.QListWidgetItem类就是列表项类. 一般列表框控件中的列表项有两种加载方式: 一种是由用户手动添加 ...

  6. ApplicationDomain

    ApplicationDomain 类的用途是存储 ActionScript 3.0 定义表.SWF 文件中的所有代码被定义为存在于ApplicationDomain 中.在使用 Loader 类 A ...

  7. autoconf配置的项目,编译debug版本

    ./configure CFLAGS=" -g " 当然,c++代码就把 CFALGS 改成 CPPFLAGS

  8. 学习笔记之Python最简编码规范

    Python最简编码规范 - 机器学习算法与Python学习 https://mp.weixin.qq.com/s/i6MwvC4jYTE6D1KHFgBeoQ https://www.cnblogs ...

  9. mybatisz中一个可以替代between..and 的技巧

    用mybatis进行时间段筛选时,如果,查询本日,本月的信息量,我们可以使用like concat()函数来替换between..and <select id="queryMyStaf ...

  10. 解决Kubernetes 1.7.3 kube-apiserver频繁异常重启的问题(转)

    原文的帖子无法访问,我只能粘贴内容 近期将之前的一个用Kubernetes 1.3.7的环境更换为最新发布的用kubeadm安装的Kubernetes 1.6.4 Dashboard无法访问的问题&g ...