前言:

近期工作中,突然被要求改别人的代码,其中有一项就是兼容IE低版本浏览器,所以优雅降级吧。

我相信兼容低版本IE是许多前端开发的噩梦,尤其是改别人写的代码,更是痛不欲生。

本文将介绍一些本人兼容时的一些心得体会,以及踩到的一些坑。

汇总:

1.IE浏览器不兼容webp格式:

项目中有些图片是用webp格式存储的,IE浏览器完全不兼容。

我们要用各种图像处理软件改成jpg或者png格式的。

2.IE浏览器对Flex不友好:

如下图,IE10以下版本对flex不兼容。因项目中大量用了flex布局,导致一切换到IE9,界面布局立马乱套。

我是利用html的hack,引入了一个新的css文件,挨个给float吧。(注意清除浮动操作,别让特定的元素丢失高度)

 <!--[if lte IE 11]>
<link rel="stylesheet" href="{$WEB_URL}/Public/common/css/ie/ieUtil.css">
<![endif]-->

3.IE9及以下对swiper插件兼容性问题:

在项目中,轮播图的板块还是比较多的,IE9以下,需要将swiper插件降级到2.x及以下

所以代码就有了这样的块:

<!--[if !IE 9]><!-->
<link rel="stylesheet" href="{$WEB_URL}/Public/common/static/swiper/css/swiper.min.css">
<script src="{$WEB_URL}/Public/common/static/swiper/js/swiper.min.js"></script>
<!--<![endif]--> <!--[if IE 9]>
<link rel="{$WEB_URL}/Public/common/static/swiper/css/idangerous.swiper2.7.6.css">
<script src="{$WEB_URL}/Public/common/static/swiper/js/idangerous.swiper2.7.6.js"></script>
<![endif]-->

说明:swiper.min.css/js,是高版本swiper;而idanger.swiper2.7.6.css/js,是swiper2的文件。

注意:这并没有写错,虽然不是标准的hack格式,但只有这么写才能不让内部的代码被浏览器放到页面上

js中需要初始化轮播图并配置,这里放一段IE版本适配的代码:

if((/msie [6|7|8|9]/i.test(navigator.userAgent))){  //如果是IE6、7、8、9则执行下边的
var liveSwiper = new Swiper('.section_center .swiper-container', {
loop: true, //设置为true,则开启loop(环路)模式,默认为false
speed: 3000, //滑动速度
autoplay: 3000, //自动切换的时间间隔(单位ms),不设定该参数slide不会自动切换。
autoplayDisableOnInteraction: false, //用户操作swiper之后,是否禁止autoplay,默认为true:停止。
watchActiveIndex:true,
pagination : '.swiper-pagination',
paginationClickable :true,
onSlideChangeEnd: function(){
var text = $(".section_center .swiper-slide").eq(this.liveSwiper.activeIndex).children().eq(0).children().eq(1).html();
$(".bannertitle").text(text); },
})
}else{
var liveSwiper = new Swiper('.section_center .swiper-container', {
slidesPerView: 1,
spaceBetween: 10,
loop: true,
autoplay: true,//可选选项,自动滑动
pagination: '.swiper-pagination',
paginationClickable: true,
pagination: {
el: '.swiper-pagination',
clickable: true,
},
navigation: {
nextEl: '.section_center .swiper-button-next',
prevEl: '.section_center .swiper-button-prev',
},
on: {
slideChangeTransitionEnd: function(){
var text = $(".section_center .swiper-slide").eq(this.realIndex + 1).find("p").text();
$(".bannertitle").text(text);
},
},
})
}

版本不同,在写法上也有一定的区别,具体可以参照2.x官网 https://2.swiper.com.cn/

4.IE9以下不要用ES6了:

随着ECMAScript标准的升级,各种语法糖深得我们喜爱,但如果要兼容低版本,就别用了吧。

切换到IE9以下,控制台中就各种报错,像let,const、模板字符串这些属于ES6范畴的,都改成ES5标准的吧。

5.IE9及以下不支持placeholder属性:

在项目中,当然有与用户交互的模块,所以输入框是一定有的。

但IE9及以下不兼容input标签的placeholder属性,这样没有提示消息,用户体验很差。

我这里是用一个div套在input外边,去监听input中的内容,逻辑如下:(虽然不灵活,但能够比较容易想象)

6.IE8及以下不兼容 JQuery 2.x 版本:

在IE8以下,对JQuery就不兼容了,这时我们要降级到1.x。上代码:

 <!--[if !IE 8]><!-->
<script type="text/javascript" src="{$WEB_URL}/Public/pdsWeb/static/jquery.min.js"></script>
<script src="{$WEB_URL}/Public/pdsWeb/static//swiper/js/swiper.min.js"></script>
<!--<![endif]-->
<!--[if IE 8]>
<script type="text/javascript" src="{$WEB_URL}/Public/pdsWeb/static/jquery-1.9.min.js"></script>
<script src="{$WEB_URL}/Public/pdsWeb/static//swiper/js/idangerous.swiper.min.js"></script>
<![endif]-->

7.IE8及以下不兼容CSS3:

CSS3是前端人的魂啊,没CSS3了,页面的视觉效果就会大打折扣。

像常用的border-radius圆角,就得强行变成方角了。

如果强行要圆角,也不是不行,有插件引插件,不行了一个像素一个像素画div也是个办法。(办法总比问题多)

最难受的是CSS3中的选择器都用不了了,也只能用传统选择器了。

8.对于IE7及以下版本的兼容:

这里就太坑了,感觉一下回到了解放前。

只是说这里可以使用css hack进行特定的属性兼容。

============================================== 分割线 ==================================================

持续更新中……

  

兼容低版本IE浏览器的一些心得体会(持续更新)的更多相关文章

  1. 模拟实现兼容低版本IE浏览器的原生bind()函数功能

    模拟实现兼容低版本IE浏览器的原生bind()函数功能: 代码如下: if(!Function.prototype.bind){   Function.prototype.bind=function( ...

  2. HTML5中的语义标签兼容IE8以及更低版本的浏览器

    看某教程,说让HTML5的这些语义标签能够兼容低版本的浏览器,原文是“你可以设置css的display属性为block”.很好理解,就设置css样式为block嘛,那就直接设置咯: header, s ...

  3. Fundebug前端JavaScript插件更新至1.8.0,兼容低版本的Android浏览器

    摘要: 兼容低版本Android浏览器,请大家及时更新. Fundebug前端BUG监控服务 Fundebug是专业的程序BUG监控平台,我们JavaScript插件可以提供全方位的BUG监控,可以帮 ...

  4. Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案

    Vue2+Webpack+ES6 兼容低版本浏览器(IE9)解决方案 解决方式:安装 "babel-polyfill" 即可. 命令:npm install --save-dev ...

  5. 使用html5兼容低版本浏览器

    因为html5 新出的一些语义化的标签,在低版本浏览器下不能识别,举个例子,比如你写了一个 header 标签中,写了一段文本,在低版本浏览器下,肯定是能看到的,但是,那是他是不认识 header标签 ...

  6. split方法在低版本IE浏览器上无法解析的问题

    前一篇不知道怎么被博客园给删了,重新补发一个. 最近在项目中发现一个很诡异的问题,通过js获取cookie时,发现赋给用户name的时候IE9和低于9以下的浏览器对比时获取到的名字不一样,通过调试发现 ...

  7. 解决opacity属性在低版本IE浏览器下失效的方法

    以前,一直都以为ie9以下的版本不支持opacity属性.所以就同时使用 opacity和ie独特的filter蒙版.但是有些时候需要一些动态的效果,就比如层的渐渐消失,隐藏,就需要使用动态变化的op ...

  8. android 在使用ViewAnimationUtils.createCircularReveal()无法兼容低版本的情况下,另行实现圆形scale动画

    ViewAnimationUtils.createCircularReveal()的简介: ViewAnimationUtils.createCircularReveal()是安卓5.0才引入的,快速 ...

  9. 低版本IE浏览器 input元素出现叉叉的情况

    都说是IE10之上的浏览器才有这个问题,恰巧我IE10之上都没有问题,反而是低版本的浏览器出现了这个问题.作为一个凭证,我先放一张图片在这里面. 之前无意中解决过这个问题,如今复现确实是没有解决,网上 ...

随机推荐

  1. 《闲扯Redis九》Redis五种数据类型之Set型

    一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...

  2. IEnumerable<T>转DataTable,为空怎么办?

    public static class DataConvertor { public static DataTable ToDataTable<T>(IEnumerable<T> ...

  3. ABAP 动态备份自建表数据到新表(自建表有数据的情况下要改字段长度或者其他)

    当abaper开发好一个程序给用户使用一段时间后,发现某个字段的长度需要修改,但数据库表中已经存在很多数据,冒然直接改表字段可能会导致数据丢失,这种问题的后果可能非常严重. 所以我想到先复制出一个新表 ...

  4. Python自动化运维 技术与最佳实践PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7bl4 一.内容简介 <python自动化运维:技术与最佳实践>一书在中国运维领域将有"划时代"的重要意义:一方面,这是国内第一本从纵.深和实践角度探 ...

  5. Python的基本运用(一)

    1.a**b  表示a的b次方. 2.def something(a,b):  定义函数,注意 python的缩进 . 3.print (a)与print a 的区别,python3中不支持print ...

  6. 《国际化Web项目测试:记第一次兼职测试的经历(一)》

    疫情期间我一直在家远程办公,无意间接到了个做测试兼职的机会.在不耽搁本职工作的情况下,我从今年五月份开启了主职和副职的并行的状态.这种项目经历对于我来说算是一次全新的体验,当然也真是累的够呛.到目前为 ...

  7. 面试:Java基础知识(一)

    1.面向对象的特征有哪些方面  1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽 ...

  8. 记一次TOMCAT一段时间自动关闭

    最近同事开发的一个项目部署上线后用过几天就TOMCAT自动关闭,并且该项目没有开通对外访问.通过阿里云监控台查看,从升级后系统内存占用上升趋势,CPU等信息没有太大变化. 打印服务器日志后发现全是线程 ...

  9. 永久修改Ubuntu的主机名称

    Ubuntu主机名称查看方法,使用hostname命令: [ubuntu@ubuntu ~]$hostname ubuntu 永久修改方法: 修改配置文件: sudo vi /etc/hostname ...

  10. “随手记”开发记录day17

    继续开发账单的图形展示这一部分,丰富“随手记”的显示方法,对我们的APP进行添砖加瓦.