ie去死
最近解决了几个ie的兼容性的bug,真的要被ie逼疯了。这里用的版本是ie11,本以为高版本ie不会很拉胯,现在看来还是高估了它。
1、ie缓存接口的问题
这个问题是我在一个扫码关注获取二维码的接口中发现的,该接口数据一般不会发生变化,正常来说也不会频繁调用,但是二维码是要考虑过期这种情况的。突然后端的同事告诉我,我没有请求他的接口。接着他断点,我请求,环境在谷歌上,没有问题。他说同事是在ie上测出来的。我又去ie上测,他断点,我请求,他告诉我我请求了一次,我把控制台截图贴给他看,我确实请求了好多次,这个时候还是怀疑问题在后端的。突然我发现请求的结果始终没有发生变化,但是他给我的确实是随机数,我翻了下ie控制台,在明显的地方与不明显的地方赫然写着——(来自缓存)。耽误了后端同事大半天的时间,小丑竟是我自己。
是的ie浏览器需要在请求头中加上两个属性,否则遇到相同的请求可能直接从缓存中读取。
Cache-Control: no-cache
Pragma: no-cache2、ie图片锯齿化问题
ie的图片在缩放时会出现锯齿化现象,该问题笔者并没有很好的统一解决方案。建议图片不要缩小
3、ie的position定位问题
ie的position定位要多测一下,要写的规范,因为他是ie
4、ie不兼容的js代码
我本以为css已经是底线了,万万没有想到在ie中一些js的用法也与谷歌不同。例如模拟下载,在谷歌中是可以创建元素模拟点击来进行下载的,但是在ie则不行,一般是采用window.navigator.msSaveOrOpenBlob()来进行下载,并且在atob()这个函数中也有些许区别,谷歌可以直接解析具有换行符的base64,但是ie中必须先手动过滤换行符(这是什么原因导致的笔者也不清楚)。总而言之,在兼容ie时也不要忘记考虑js部分。