vue项目系统兼容IE浏览器问题以及解决方案
Posted wodomXQ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue项目系统兼容IE浏览器问题以及解决方案相关的知识,希望对你有一定的参考价值。
系统兼容IE浏览器问题以及解决方案
问题
vue项目在IE浏览器上运行时会出现兼容性问题:javascript语法报错,css样式错乱。原因是在IE(以IE11为例)浏览器下,部分js的写法需要改变,部分样式在IE浏览器上不支持,以及一些IE浏览器特有的问题。
-
vue 只兼容ie8以上版本;
-
IE 不兼容 axios的promiss对象;
-
IE 不兼容es6语法;
解决方案
下载对应插件包解决js兼容性问题:babel-polyfill,es6-promise以及 babel-plugin-transform-es2015-modules-commonjs
一、关于babel-polyfill
1、说明:This will emulate a full ES2015+ environment and is intended to be used in an application rather than a library/tool. This polyfill is automatically loaded when using babel-node.(模拟ES2015以上的环境,主要用于对ES6新语法不支持的浏览器);
2、安装:npm install --save babel-polyfill;
3、配置:module.exports = entry: [“babel-polyfill”, “./src/main.js”] ;
4、main.js中配置:import ‘babel-polyfill’ //放在最顶部,确保全面加载
二、关于es6-promise
1、说明:若在项目中使用了ES6 promise对象,它在Chrome、Safari浏览器下可以正常运行,但在360兼容模式、IE内核中不支持;
2、安装:npm install es6-promise;
3、配置:在main.js中加入require(‘es6-promise’).polyfill(),用于在node或浏览器中支持ES6 与CommonJS。
因为项目中require和import混用的原因,在做了IE兼容之后打包会出现问题,会报以下错误:
Cannot assign to read only property 'exports' of object '#<Object>'
此时就需要安装babel-plugin-transform-es2015-modules-commonjs插件来解决报错
先安装:
npm install --save-dev babel-plugin-transform-es2015-modules-commonjs
然后再 .babelrc 中添加该插件
"plugins": ["transform-es2015-modules-commonjs"]
安装完以上插件之后,还需要做相关配置的修改,具体操作如下:
vue.config.js文件chainWebpack方法中添加
config.entry.app = ["babel-polyfill", "./src/main.js"];
config.module.rule('compile')
.test(/\\.js$/)
.include
.add(resolve('src'))
.add(resolve('test'))
.add(resolve('node_modules/webpack-dev-server/client'))
.add(resolve('node_modules'))
.end()
.use('babel')
.loader('babel-loader')
.options(
presets: [
['@babel/preset-env',
modules: false
]
]
);
babel.config.js中对应修改,添加sourceType和useBuiltIns:
module.exports =
presets: [
// '@vue/cli-plugin-babel/preset', //文件原始内容
['@vue/app',
useBuiltIns: 'entry', //添加的内容
]
],
sourceType: 'unambiguous'
main.js中代码顶部加入对应引用:
import 'babel-polyfill'
import Es6Promise from 'es6-promise'
require('es6-promise').polyfill()
Es6Promise.polyfill()Plain Text
以上就是处理IE浏览器js兼容问题,至于css样式兼容,则需要对应修改对应文件样式,在IE浏览和chrome浏览器上分别测试,两边都适配才可以。
vue 项目在ie浏览器的兼容问题
参考技术A一、关于babel-polyfill
1、说明:This will emulate a full ES2015+ environment and is intended to be used in an application rather than a library/tool. This polyfill is automatically loaded when using babel-node.(模拟ES2015以上的环境,主要用于对ES6新语法不支持的浏览器);
2、安装: npm install --save babel-polyfill;
3、配置: module.exports = entry: ["babel-polyfill", "./src/main.js"] ;
4、main.js中配置: import \'babel-polyfill\' //放在最顶部,确保全面加载。
二、关于es6-promise
1、说明:若在项目中使用了ES6 promise对象,它在Chrome、Safari浏览器下可以正常运行,但在360兼容模式、IE内核中不支持;
2、安装: npm install es6-promise;
3、配置:在main.js中加入 require(\'es6-promise\').polyfill() ,用于在node或浏览器中支持ES6 与CommonJS。
三、步骤详细图
1、index引入这句话或者这三句话
2、执行 npm install --save babel-polyfill;
执行完上面语句package.json里面就有了这个依赖(检查2部是否执行完成的一个结果)
3、最上面引入,确保加载进去。
4、修改entery里面的内容改成下图那样
四、问题如图:
当把这些攻略都做了一遍后,发现打包完的360的急速模式可以了(本地运行还是不可以),但是!!!ie浏览器,360兼容模式,不管打包还是没打包,都不能显示,完全没有加载进去数据,如下图
并且还报错以下未定的错
(1)、
查询后发现,是因为IE没有这个方法,不支持sessionStorage,解决的方法是:IE本地调试用cookie,或者用webstrom打开项目,但我确实用的webstorm打开的项目,还是不可以,后来找到解决方法, 要把es6转es5 !
然后, npm run dev ,居然可以了适配了。
以上是关于vue项目系统兼容IE浏览器问题以及解决方案的主要内容,如果未能解决你的问题,请参考以下文章