详解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 兼容鼠标滚轮事件
Apr 07 Javascript
一个JavaScript函数把URL参数解析成Json对象
Sep 24 Javascript
用window.onerror捕获并上报Js错误的方法
Jan 27 Javascript
Bootstrap模块dropdown实现下拉框响应
May 22 Javascript
jQuery DateTimePicker 日期和时间插件示例
Jan 22 Javascript
JavaScript在form表单中使用button按钮实现submit提交方法
Jan 23 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
js事件触发操作实例分析
Jun 21 Javascript
Vuex的实战使用详解
Oct 31 Javascript
React实现阿里云OSS上传文件的示例
Aug 10 Javascript
小程序实现左滑删除的效果的实例代码
Oct 19 Javascript
javascript代码简写的几种常用方式汇总
Aug 23 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
php+mysql写的简单留言本实例代码
2008/07/25 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
javascript Canvas动态粒子连线
2020/01/01 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Django Celery异步任务队列的实现
2019/07/24 Python
Pycharm修改python路径过程图解
2020/05/22 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
历史学专业个人的自我评价
2013/10/13 职场文书
现金会计岗位职责
2013/12/05 职场文书
中学生爱国演讲稿
2013/12/31 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python