判断浏览器是否是 IE 及 IE8 以下版本
作为一个前端,避免不了会遇见IE的坑,其他浏览器都好好的,测到IE就完蛋,各种不支持,服气了
有些属性和方法是所有版本IE都不支持,而有些则是部分支持,在项目中能够,主要分界岭为IE8,我相信目前大部分在维护和开发的项目,都是支持到IE8及已上版本即可,那么这篇文章,粗浅的总结一下,如何判断浏览器是IE及版本是8.0
首先,有些属性和方法是所有版本IE都不支持,那么只需要判断是否是IE即可
以下三种是我在项目中,用到的方法,如有新的方法,会更新,若大家有其他更好的方法,还望不吝赐教~~
- document.all
- window.ActiveXObject
- window.navigator.msSaveOrOpenBlob
//选一种即可
function isIE(){
  // 据说火狐以后会加入document.all这个方法,所以建议使用另外二种方法
  if (document.all) return true; 
  if (!!window.ActiveXObject || "ActiveXObject" in window) return true; 
  if (window.navigator && window.navigator.msSaveOrOpenBlob)  return true;
}
判断浏览器是IE8及以下版本
我在上文中也提到,大部分在维护和开发的项目,都是支持到IE8及已上版本即可
navigator.userAgent

function isIE8(){
  var DEFAULT_VERSION = 8.0;
  var ua = navigator.userAgent.toLowerCase();
  var isIE = ua.indexOf("msie")>-1;
  var safariVersion;
  if(isIE){
    safariVersion =  ua.match(/msie ([\d.]+)/)[1];
  }
  if(safariVersion <= DEFAULT_VERSION ){
    return true
  };
}
如有特殊要求,需要兼容更低版本,那么:
var isIE = !!window.ActiveXObject; 
var isIE6 = isIE && !window.XMLHttpRequest; 
var isIE8 = isIE && !!document.documentMode; 
var isIE7 = isIE && !isIE6 && !isIE8;
IE8及以下不支持的CSS属性
- 阴影 box-shadow
- 渐变 linear-gradient
- 提示符 placeholder
- 透明度 rgba
- 边框 border-image
- 圆角 border-radius
- 旋转相关 transform
IE不支持的方法
- 在线浏览PDF文件,因为IE并没有内置的pdf阅读器,因此只能下载查看 - 后端返回文件流时:window.navigator.msSaveOrOpenBlob(blob);具体可以参考另两篇博文,
- JavaScript处理后端返回PDF文件流,在线预览下载PDF文件
- Vue.js +pdf.js 处理响应pdf文件流数据,前端转图片预览不可下载
 
- 不支持 - <a>标签的- download属性,因此可以用新建- iframe,并设置其- src属性
if (isIE()){
	$("a").bind('click',function(){
		var elemIF = document.createElement("iframe");
		elemIF.src = FilePath;
		elemIF.style.display = "none";
		document.body.appendChild(elemIF);
	});
} else {
	$("a").attr("href",FilePath).attr("download",FileName);
}
判断浏览器是否是 IE 及 IE8 以下版本的更多相关文章
- JS如何判断浏览器类型和详细区分IE各版本浏览器
		/* * 描述:判断浏览器信息 * 编写:LittleQiang_w * 日期:2016.1.5 * 版本:V1.1 */ //判断当前浏览类型 function BrowserType() { va ... 
- JS判断浏览器类型和详细区分IE各版本浏览器
		今天用到JS判断浏览器类型,于是就系统整理了一下,便于后期使用. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ... 
- JS判断客户浏览器是否是IE8浏览器、jQuery判断浏览器内核
		今天在使用encharts的时候由于要兼容IE8,所以最终决定在非IE8浏览器使用encharts,在IE8使用amcharts.于是需要使用JS判断使用的浏览器版本: function IEVers ... 
- jquery 1.9 1.8 判断 浏览器(IE11,IE8,IE7,IE6)版本
		1.9以后很我方法删除了,所有和之前版本判断浏览器版本有所差记录一下 1.9 ------------------------------------------------------------- ... 
- js判断浏览器类型以及浏览器版本
		判断浏览器类型: if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAg ... 
- js判断浏览器,包括Edge浏览器
		/* * 描述:判断浏览器信息 * 编写:LittleQiang_w * 日期:2016.1.5 * 版本:V1.1 */ //判断当前浏览类型 function BrowserType() { va ... 
- js/jquery判断浏览器的方法小结
		在网站前端开发中,浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本,而判断浏览器的版本一般只能通过分析浏览器的userAgent才能知道.今天我们把 ... 
- 使用window.navigator.userAgent属性判断浏览器类型及版本
		使用window.navigator.userAgent属性判断浏览器类型及版本 2011-12-11 22:03:11 window.navigator.userAgent属性包含了浏览器类型.版本 ... 
- 学习笔记:js、css、html判断浏览器的各种版本
		js.css.html判断浏览器的各种版本 (转载自:http://www.jb51.net/web/42244.html 版权归原作者所有) 利用正则表达式来判断ie浏览器版本 判断是否IE浏览器 ... 
- javascript判断浏览器的版本
		在javascript中直接的使用navigator.userAgent就可以获取当前浏览器的版本等信息,以下是列出来的关于不同浏览器显示的值(Windows.Android.iPhone): IE6 ... 
随机推荐
- dpkg和rpm对比及常用命令
			dpkg(Debian Package)和rpm(RPM Package Manager)是两种不同的Linux包管理工具,它们各自在特定的Linux发行版中占据核心地位.两者之间对比如下: 所属发行 ... 
- vue2遇到的一些错误
			一.VUE中的VUEX如何调用modules里面的mutations和state ...mapMutations("workflow",['setApproverConfig' ... 
- Vue cli之使用Vue-CLI初始化创建前端项目
			1.生成项目目录 使用vue自动化工具可以快速搭建单页应用项目目录. 该工具为现代化的前端开发工作流提供了开箱即用的构建配置.只需几分钟即可创建并启动一个带热重载.保存时静态检查以及可用于生产环境的构 ... 
- 鸿蒙HarmonyOS实战-Stage模型(线程模型)
			前言 线程是计算机中的一种执行单元,是操作系统进行调度的最小单位.它是进程中的实际运行单位,每个进程可以包含多个线程.线程可以理解为进程中的一个执行流,它独立运行,拥有独立的栈和寄存器,但共享进程的资 ... 
- springboot~封装依赖引用包jar还是pom,哪种更规范
			将多个第三方包封装成一个项目后,如果你的目的是让其他开发人员可以直接引用这些依赖,一般来说有两种常见的方式: 打成JAR包:将封装好的项目编译打包成JAR文件,其他开发人员可以将这个JAR文件添加到他 ... 
- docker资源限制与数据持久化
			1. docker简介和核心概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使 ... 
- Swift 计算字符串展示的区域
			一.如果是普通文本,那么可以采用NSString的方法,代码如下: import UIKit import PlaygroundSupport class MyViewController : UIV ... 
- Linux进程间通信-管道(pipe)
			本系列文章主要是学习记录Linux下进程间通信的方式. 常用的进程间通信方式:管道.FIFO.消息队列.信号量以及共享存储. 参考文档:<UNIX环境高级编程(第三版)> 参考视频:Lin ... 
- Linux扩展篇-shell编程(八)-shell字符串截取
			shell字符串截取,一般包含从指定位置和从指定字符截取. 一.从指定位置截取 1) 从字符串左边开始计数 格式: ${string: start :length} 从 string 字符串的左边第 ... 
- rust 程序设计笔记(2)所有权 & 引用
			所有权 数据存储在栈和堆上,存放在栈上的数据都是已知所占据空间的 突然的问题 // 内存中的栈是怎么存储数据的? 好的,想象一下你有一摞盘子.你只能从上面放盘子,也只能从上面拿盘子,这就是栈的工作方式 ... 
