详解vue 兼容IE报错解决方案


Posted in Javascript onDecember 29, 2018

IE 页面空白

报错信息

详解vue 兼容IE报错解决方案

详解vue 兼容IE报错解决方案

此时页面一片空白

报错原因

Babel 默认只转换新的 JavaScript 语法(如箭头函数),而不转换新的 API ,比如 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等新的对象或者方法。

例如 Promise 、新的原生方法如 String.padStart (left-pad) 等。为了解决这个问题,我们使用一种叫做 Polyfill(代码填充,也可译作兼容性补丁)的技术。

简单的说,兼容问题一般是IE 对于es6 的部分新对象、表达式,语法并不支持,解决方案是使用 babel-polyfill 来正常使用ES6。

Polyfill 是什么

举个例子,有些旧浏览器不支持 Number.isNaN方法,Polyfill就可以是这样的:

if(!Number.isNaN) {
  Number.isNaN = function(num) {
    return(num !== num);
  }
}

Polyfill就是类似这样解决API的兼容问题

解决方案

1、使用babel-polyfill

引入 babel-polyfill

npm i -S babel-polyfill

如何使用

使用它时需要在你应用程序的入口点顶部或打包配置中引入。

在main.js 引入

import 'babel-polyfill'

或者在config中的 webpack.base.conf.js中 修改配置

entry:{
  app:['babel-polyfill','./src/main.js']   
}

2、在index.html 加入以下代码(非必须)

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

3、babel-loader 中指定模块转码

增加了poly-fill还是报错,这一般是使用了第三方的ui框架、库、插件等,并且这些ui框架、库、插件底层有es6的语法。

找到webpack.base.conf.js 中的babel-loader

比如我这里用了element-ui 跟 v-charts 修改成如下:

{
    test: /\.js$/,
    loader: 'babel-loader',
    include: [
     resolve('src'),
     resolve('test'),
     resolve('node_modules/webpack-dev-server/client'),
     resolve('node_modules/v-charts/src'),
     resolve('node_modules/vue-awesome'),
     resolve('node_modules/element-ui/packages'),
     resolve('node_modules/element-ui/src')
    ]
}

4、打包问题

如果是webpack代码打包出错,一般到 github webpack Issues中可以找到答案

这个错误是因为webpack-dev-server 版本问题

详解vue 兼容IE报错解决方案

5、Babel 配置 .babelrc文件

.babelrc是Babel的配置文件,放在项目根目录下。一般情况下.babelrc文件不需要修改,如果以上都做了,还是报错,可以看下官网文档来配置下该文件

详解vue 兼容IE报错解决方案

在项目使用 vue-cli 生成的代码中,根目录有一个 .babelrc 文件。在默认生成的模板内容中,增加 "useBuiltIns": "entry",这是一个指定哪些内容需要被 polyfill(兼容) 的设置

useBuiltIns 有三个设置

  • false - 不做任何操作
  • entry - 根据浏览器版本的支持,将 polyfill 需求拆分引入,仅引入有浏览器不支持的polyfill
  • usage - 检测代码中 ES6/7/8 等的使用情况,仅仅加载代码中用到的 polyfill
{
 "presets": [
  ["env", {
   "modules": false,
   "useBuiltIns": "entry"
  }],
  "stage-2"
 ],
 "plugins": ["transform-runtime", "transform-vue-jsx"],
 "env": {
  "test": {
   "presets": ["env", "stage-2"],
   "plugins": ["istanbul"]
  }
 }
}

具体相关可以查看Babel官网:https://www.babeljs.cn/

总结

1、用vue 写的项目最多可以兼容到IE9 及以上版本

2、使用babel-polyfill

3、在babel-loader中指定需要转码的第三方的ui框架、库、插件路径

4、配置 .babelrc文件

5、Babel 是一个厉害的东西https://www.babeljs.cn/

补充:

问题:ie浏览器autoprefixer自动补全css前缀无效

解决方法:

ie发现使用内联样式,autoprefixer无法生效,所以需要写到style标签内。

问题:ie10打开包语法错误,如图所示

详解vue 兼容IE报错解决方案

解决方法

点击app.js,跳转到报错的位置,如图

详解vue 兼容IE报错解决方案

发现最后一行有个import的文件,所以锁定到错误肯定是在引入的这个文件内。

把common.js打开,检查语法,发现有个变量定义用了ES6的语法let。所以引入的文件,插件没有起作用。

没有将ES6转ES5。然后修改了之后,问题解决。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 获取字符串字节数的多种方法
Jun 02 Javascript
jQuery 扩展对input的一些操作方法
Oct 30 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
js数组中如何随机取出一个值
Jun 13 Javascript
jQuery中get和post方法传值测试及注意事项
Aug 08 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 Javascript
详解用node-images 打造简易图片服务器
May 08 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
微信小程序tabBar 返回tabBar不刷新页面
Jul 25 Javascript
关于JS解构的5种有趣用法
Sep 05 Javascript
npx create-react-app xxx创建项目报错的解决办法
Feb 17 Javascript
玩转Koa之koa-router原理解析
Dec 29 #Javascript
Bootstrap Paginator+PageHelper实现分页效果
Dec 29 #Javascript
玩转Koa之核心原理分析
Dec 29 #Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 #Javascript
bootstrap与pagehelper实现分页效果
Dec 29 #Javascript
微信小程序实现滑动切换自定义页码的方法分析
Dec 29 #Javascript
vue实现分页组件
Jun 16 #Javascript
You might like
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
php自定文件保存session的方法
2014/12/10 PHP
php简单分页类实现方法
2015/02/26 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
JS中传递参数的几种不同方法比较
2017/01/20 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
vue实现扫码功能
2020/01/17 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
Python 列表(List)操作方法详解
2014/03/11 Python
Python解释执行原理分析
2014/08/22 Python
理解Python垃圾回收机制
2016/02/12 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Python基础之文件读取的讲解
2019/02/16 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
质量承诺书范文
2014/03/27 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
社会公德演讲稿
2014/05/20 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
雷锋电影观后感
2015/06/10 职场文书
优秀教师主要事迹材料
2015/11/04 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
如何做好工作总结!
2019/04/10 职场文书
分享15个Webpack实用的插件!!!
2021/03/31 Javascript
CSS3常见动画的实现方式
2021/04/14 HTML / CSS