ie8兼容总结

背景

虽然好些年不用jquery了,不过以前学jquery源码的经验还是历历在目。
最近维护老项目,需要开发一个兼容ie6的jquery插件,遇到了一些兼容性的问题,记录一下。

需求

需要做一个多种类型的验证码(图片拖拽,随机字符)的业务功能,因为是在多个平台上都要用且这些平台都是许多年前开发的,所以考虑做成一个jquery插件,方便维护。

问题

  1. css3的兼容
    因为第一个版本没考虑到要兼容低版本Ie,以为只要做一个jquery插件即可,毕竟都快2022了,谁还用ie呀。所以圆角和阴影都是用了css3。但是后来在ie8中的效果就很尴尬。
    后来找到CSS3PIE这个库,就兼容了。
    css3pie地址 http://css3pie.com/

    这个库能对钝角及阴影等部分css3属性进行兼容处理
    demo
.slide-box .slide-img-scroll-bar {
  position: relative;
  background: #eef4f5;
  margin: 0px 10px 15px 10px;
  height: 28px;
  border: 1px solid #adadad;

  border-radius: 20px;
  -webkit-border-radius: 20px;
  -moz-border-radius: 20px;
  behavior: url("./lib/style/resource/PIE.htc");	//这里的这个地址要注意!!  不是该css相对库文件的地址,而是引用该css的html地址.这里有点坑。
}
  1. cors跨域请求
    有几个地方需要设置,(建议不用cors跨域而使用jsonp,原因请看第四点)
    1 在jquery插件初始化的时候进行设置

jQuery.support.cors = true;

在这里插入图片描述
2 ajax请求需要设置

crossDomain:true
在这里插入图片描述

3 cors方式跨域需要设置ie浏览器,详情可查看下面链接
https://blog.csdn.net/tjj3027/article/details/81354888
  1. jsonp跨域
    建议使用jsonp方式在ie8中跨域。
    因为用cors跨域的话,需要浏览器设置。且ie10以下的不支持cors方式跨域。这次的插件也因为需要这样设置导致请求改成jsonp方式跨域

  2. 缓存需要手动设置
    ajax请求需要手动清除缓存,在ajax中加上cache:false,可以看上图

  3. ie中需要删除console

  4. 不兼容css的透明属性opacity
    有两种方案,
    一种是用
    display: block & none;来进行切换
    另一种是用filter来兼容低版本浏览器

   -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: alpha(opacity=75);
    -khtml-opacity: 0.75;
    -moz-opacity: 0.75;
    opacity: 0.75;
  1. 图片base64 有体积限制
    因为验证码都是接口返回的动态图片,之前都是设计成base64传递,后来发现,验证码图片小体积的可以在ie8中显示,但是稍微大点的都无法显示。这是因为ie8中用base64来显示的图片体积不能超过38kb。
    解决办法
    1. 将接口改成数据流,而不是用base64
    2. html中使用
<img src="http://10.10.10.10/getImg?id=123">

这样的写法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值