详解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 相关文章推荐
jquery 缓存问题的几个解决方法
Nov 11 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
详解react-redux插件入门
Apr 19 Javascript
webpack 3.X学习之多页面打包的方法
Sep 04 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
Sep 27 Javascript
详解微信小程序回到顶部的两种方式
May 09 Javascript
浅入深出Vue之组件使用
Jul 11 Javascript
ES6中异步对象Promise用法详解
Jul 31 Javascript
JS操作字符串转数字的常见方法示例
Oct 29 Javascript
Node.js API详解之 string_decoder用法实例分析
Apr 29 Javascript
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
WebRTC记录音视频流(web技术分享)
Feb 24 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实现防盗链的方法分析
2017/07/25 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
Javascript - HTML的request类
2006/07/15 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
bootstrap datepicker插件默认英文修改为中文
2017/07/28 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
Nodejs中获取当前函数被调用的行数及文件名详解
2018/12/12 NodeJs
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
python算法学习之计数排序实例
2013/12/18 Python
利用python修改json文件的value方法
2018/12/31 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
结婚邀请函范文
2014/01/14 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
语文高效课堂实施方案
2014/05/03 职场文书
应用心理学专业求职信
2014/08/04 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技