最好的ie版本检测方式
预备知识: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大哥的检测
普遍的检测方法有以下几种
- 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版本检测方式的更多相关文章
- ios应用启动后的自动版本检测方式
今天意外的发现了appstore居然还提供通过url获取json格式的客户端信息链接: http://itunes.apple.com/lookup?id=$id 通过此地址可以获取应用的icon.介 ...
- _1Python简介 安装及版本检测
简介 Python是一种面向对象的解释性计算机程序设计语言,由荷兰人Guido von Rossum于1988年的圣诞节发明,第一个公开发行版于1991年. Python崇尚优美.清晰.简单,是一个优 ...
- Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!
Android服务器--使用TomCat实现软件的版本检测,升级,以及下载更新进度! 算下来,TomCat服务器已经写了很长一段时间了,一直说拿他来搞点事 情,也一直没做,今天刚好有空,交流群还有人请 ...
- Dependabot 开始支持 pub package 版本检测
今年年初,我们发布了 Flutter 2022 产品路线图,其中「基础设施建设」这部分提到:2022 年 Flutter 团队将增加对供应链的安全的投入,目的是达到符合基础设施 SLSA 4 级别中描 ...
- 通过adb方式给安卓手机截图的cmd批处理文件
@echo off rem 通过adb方式截图rem 需要安装adb ,一般安装了android sdk 默认带了adb ,路径为sdk目录的android-sdk\platform-toolsr ...
- VisualVM通过jstatd方式远程监控远程主机
配置好权限文件 [root@test bin]# cd $JAVA_HOME/bin [root@test bin]# vim jstatd.all.policy grant codebase &qu ...
- 在WPF中使用依赖注入的方式创建视图
在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...
- UWP中新加的数据绑定方式x:Bind分析总结
UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...
- MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息
MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...
随机推荐
- 页面框架加载完自动执行函数$(function(){});
页面中有一些大的资源文件,如图片,声音等,如果一个事件绑定写在这些加载资源代码的下方,那么要等资源加载完才会绑定,这样体验不够好. 于是想不等资源加载完,只要框架加载完成就绑定事件,就可以把代码放在以 ...
- Web Services and C# Enums
Web Service Transparency .NET support for web services is excellent in creating illusion of transpar ...
- ckeditor_4.5.10_full,ckfinder_aspnet_2.6.2,插件使用
1.ckfinder文件上传的权限: public override bool CheckAuthentication() { // WARNING : DO NOT simply return &q ...
- googletest基本测试宏
还不知道googletest基本使用方法的请参看前一篇blog 使用googletest进行C++单元测试 本篇仍然使用testStack测试文件进行测试,测试代码如下 #include <g ...
- R语言—使用函数sample进行抽样
在医学统计学或者流行病学里的现场调查.样本选择经常会提到一个词:随机抽样.随机抽样是为了保证各比较组之间均衡性的一个很重要的方法.那么今天介绍的第一个函数就是用于抽样的函数sample: > ...
- 注入 - Ring3 APC注入
系统产生一个软中断,当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数,利用QueueUserAPC()这个API,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的, 1.根据进 ...
- 01-TCP/IP概述
TCP/IP 概述 允许不同厂家的各种型号的计算机使用不同操作系统互相进行通信 真正的开放系统 "全球互联网"或"因特网"的基础 2.分层 网络协议通常分不同层 ...
- 事件之父View和子view的点击事件的执行过程
Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN-& ...
- Jmeter(十九)Logic Controllers 之 Module Controller and Include Controller
Module Controller ---模块控制器 测试计划设置“独立运行没每个线程组” 线程组2中使用Module Controller执行线程组1中的Sampler: 紧接着,将线程组1disa ...
- Windows使用Idea编译spark源码
1. 环境准备 JDK1.8 Scala2.11.8 Maven 3.3+ IDEA with scala plugin 2. 下载spark源码 下载地址 https://archive.apach ...