其实个人觉得兼容 IE11 都没啥必要(毕竟微软自己都放弃了 IE,开始使用 Edge 了),如果公司非要做那就硬着头皮上吧。
题外话:有人和我提过某些特殊行业可能有 IE 的应用市场,但我仍然保持怀疑的态度,有以下几点理由。
需要配置一下预编译
默认开启了向下兼容的预编译
Vue Cli 默认只会转换项目中自己写的 ES6+ 代码为 ES5 的代码。这就意味着你无法确保你用的所有第三方库都已经是 ES5 代码。你需要查阅所有第三方库的兼容性 问题,然后告诉脚手架,我这个第三方库也需要进行代码降级。详情请查看 :Vue 官方文档
当使用 IE11 时,IE11 遇到相同的 get 请求会默认直接读取本地缓存。
但是有时候我们重复获取相同请求的原因是我们刚刚对数据进行了增删改查,需要立刻看到增删改查的结果,所以我们发送了相同的请求。
解决办法,在请求路径中加入时间戳混淆。以 axios 拦截器为例:
service.interceptors.request.use(
config => {
// 兼容 IE11 相同的 get 请求直接读取本地缓存的问题
if (config.method === 'get') {
config.params = config.params || {}
config.params.t = Date.parse(new Date()) / 1000
}
return config
},
error => {
return Promise.reject(error)
}
)
虽然说 IE11 兼容了部分 flex 属性,但是实际用起来的效果还是很差的。
比如:最常用的 flex,垂直水平居中,IE11 在不规定子元素高度的情况下是没有办法做到垂直居中的。这种情况下只能改用 transform,top 的方案来垂直居中。
ElementUI也大量使用了 Flex 属性,如果您使用的项目使用了 ElementUI 同时还想要兼容 IE11,请慎重考虑(基本上弹性布局的组件都需要修改或重写)。
在兼容 IE11 的过程中,我发现 IE11 使用此属性时会产生编码问题,导致 vue router params 不能获取到正确的参数。
解决办法:手动对参数进行 URL 编码再解码。此方法非常重要,建议养成对 URL 进行编码的习惯。
IE 中跨域的 websocket 可能会产生此错误,产生此错误需要用户在浏览器手动设置相关配置来保证功能正常(但这样是非常麻烦且不能保证 100% 功能正常使用的)。
尽量确保代码的部署环境,前后端最好在一个局域网内,以避免此问题。