一、兼容ES6

Vue 的核心框架 vuejs 本身,以及官方核心插件(VueRouter、Vuex等)均可以在 ie9 上正常使用。但ie不兼容es6,所以需要安装插件将“Promise”等高级语法转换成ie可以识别的es5。

  报错:ReferenceError: “Promise”未定义,页面空白
  报错:app.js文件报错页面空白,可能是缺少配置文件.babelrc

一、 babel-polyfill
npm install babel-polyfill --save
  在main.js中的最前面引入import 'babel-polyfill'(注:必须引入在最前面,保证所有es6语法都会被解析)
  下载完成后找到build文件夹下的webpack.base.conf.js下的一段代码

module.exports = {
  entry: {
    app: './src/main.js'
  },

替换为

module.exports = {
context: path.resolve(__dirname, '../'),
entry: {
  app: ["babel-polyfill", "./src/main.js"],
}

二、如果引入 babel-polyfill还有一些高级语法没有被编译,配置 .babelrc文件,官网如下: https://www.babeljs.cn/ 根据项目选择引入什么插件,以及如何配置,详情查看官网。

检查根目录下是否有.babelrc文件,如没有自行创建。
.babelrc是Babel的配置文件,放在项目根目录下,使用Babel的第一步就是配置这个文件,该文件主要是对预设(presets)和插件(plugins)进行配置

创建.babelrc文件的方法:
  1.新建一个文件
  2.右键-重新命名-输入.babelrc. (开头和结尾一共两个点)
  3.添加配置代码,

  {
    "presets": [
      ["env", {
        "modules": false,
        "useBuiltIns": "entry"
      }],
    "stage-2"
    ]
  }

配置代码解读:
(1) modules该参数的含义是:启用将ES6模块语法转换为另一种模块类型。将该设置为false就不会转换模块。默认为 ‘commonjs’.
  这样做的目的是:以前我们需要使用babel来将ES6的模块语法转换为AMD, CommonJS,UMD之类的模块化标准语法,但是现在webpack都帮我做了这件事了,所以我们不需要babel来做,因此需要在babel配置项中设置modules为false,因为它默认值是commonjs, 否则的话,会产生冲突。

(2) useBuiltIns是指定哪些内容需要被 polyfill(兼容) 的设置,有三个设置选项

  false - 不做任何操作
  entry - 根据浏览器版本的支持,将 polyfill 需求拆分引入,仅引入有浏览器不支持的polyfill
  usage - 检测代码中 ES6/7/8 等的使用情况,仅仅加载代码中用到的 polyfill

(3) stage-2官方预设(preset), 有两种,一个是按年份(babel-preset-es2017),一个是按阶段(babel-preset-stage-0)。 这主要是根据TC39 委员会ECMASCRPIT 发布流程来制定的。
    因此到目前为止 有4个不同的阶段预设:stage-0,1,2,3以上每种预设都依赖于紧随的后期阶段预设,也就是说stage-0是包括stage-1的,以此类推。
  因此 stage-0包含stage-1/2/3的内容。所以如果我们不知道需要哪个stage-x的话,直接引入stage-0就好了。
  目前一般是使用stage2 (https://babeljs.io/docs/en/babel-preset-stage-2) 该特性规范己经被起草,将会被纳入标准里.

配置完以上两项后,基本可以解决页面空白的问题。

三、网上还有一些其他注意事项,比如安装了新的功能性插件e-chart,地图,或者static目录下有其他js文件(有es6语法) 等,IE 会报错。
这是由于这些第三方插件的底层也有es6代码,没有被编译,个人实践后认为是由于没有将babel-polyfill引入在页面最顶部导致的。但如引入在顶部还报错,请参考以下解决方案:
1.找到webpack.base.config.js
2.

{
  test: /\.js$/,
  loader: 'babel-loader',
  include: [
  resolve('src'),
  resolve('test'),
  resolve('static'),
  resolve('node_modules/webpack-dev-server/client')
  resolve('node_modules/echarts')
  ]
}

二、兼容axios

  一、如果只需要兼容axios的话,可以只用 es6-promise ,不引用babel-polyfill,安装方法如下:

  npm install es6-promise --save
  import promise from 'es6-promise';
  promise.polyfill();

二、IE浏览器缓存问题,导致axios接口不重新请求,页面内容不刷新
  解决方案: axios请求上加时间戳,使每次都是参数不同的新请求

  1、找到项目中对axios进行封装的文件
  2.找到post和get方法,修改里面的参数,以post请求为例,原参数为data: ...param,改为如下第7行所示

//post请求
  post(url, param) {
    return new Promise((resolve, reject) => {
      axios({
    method: 'post',
    url,
    data: {
      t: Date.parse(new Date()),
      ...param
    },
    cancelToken: new CancelToken(c => {
      cancel = c
    })
    }).then(res => {
    resolve(res)
      }).catch((error) => {
    reject(error);
      })
    })
  }

3.问题分析:
这个页面不刷新的问题,一开始以为是v-router的缓存机制导致的,尝试在每次跳转路由时加时间戳,但并没有解决问题,最后才发现是axios的问题。
由此反向推理,如果将axios加上时间戳,不能解决问题,请重新检查是否有v-router的,或者请求方式为history,等缓存机制的影响。

vue项目兼容ie的更多相关文章

  1. 如何让vue项目兼容IE浏览器

    一般来说项目开发到后期都需要做各种兼容性处理例如:360.IE9以上.QQ浏览器....等等 那么现在来介绍一个工具 babel-cli 跟 babel-preset-es2015 babel-cli ...

  2. Vue项目兼容IE浏览器

    转载:https://blog.csdn.net/qq_24956515/article/details/77527668 Vue项目部署到服务器后,通常除IE浏览器外其他都正常,而IE浏览器会报这么 ...

  3. vue项目兼容es6语法跟IE浏览器

    要安装babel-polyfill和es6-promise.用来兼容ie和es6: 附赠链接下载:https://babeljs.io/docs/en/6.26.3/babel-polyfill:ht ...

  4. IE显示 “Promise”未定义,vue项目兼容ie的两种方案

    第一种方法: 直接在html中加入js链接: <script src = "https://cdn.polyfill.io/v2/polyfill.min.js">&l ...

  5. 从 ie10浏览器下Symbol 未定义的问题 探索vue项目如何兼容ie低版本浏览器(ie9, ie10, ie 11 )

    问题:     vue项目在ie11下一片空白并报Symbol 未定义的错 原因:     ie10浏览器解析不了es6的语法,需要我们使用babel(Babel是一种工具链,主要用于将ECMAScr ...

  6. vue 项目在 IE11 里呈现空白,不兼容的问题解决方案

    我用vue 2.6.11版本编写的项目,在谷歌浏览器上运行的好好地,但是放到ie11浏览器上却是一片空白. 这个问题遇到的时候,我是蒙蔽了,抓紧去搜了搜百度,百度上的答案倒是都很统一. 都是说ie不兼 ...

  7. vue项目目录介绍

    Vue项目目录 初始化项目 vue init webpack []projectname] cd [projectname] npm install vue run dev 目录树 +---build ...

  8. 如何快速把 Vue 项目升级到 webpack3

    由于 webpack3升级后,新增了 Scope Hositing(作用域提升) 功能,据说是对 js的性能提升很大.因此,我们做了一个测试对比,就是 webpack3和 webpack1/2 的性能 ...

  9. 去除vue项目中的#及其ie9兼容性

    一.如何去除vue项目中访问地址的# vue2中在路由配置中添加mode(vue-cli创建的项目在src/router/index.js) export default new Router({ m ...

随机推荐

  1. 第十一节:configParse模块

    作用:配置文件解析模块,用来增删改查配置文件内容,不区分大小写 配置文件案例: tets.ini [模块] key=value import configparser config = configp ...

  2. 全网最全C#实习面试题目

    整个内容是我在春招面试时候整理的一些题目,里面涵盖有网上搬运的(由于当时没有记录来源,如果有转载没标注来源,请与我联系),还有我面试到的.整个排版很乱,后期我会一步一步整理.整个内容大概快有两万字.整 ...

  3. DNA sequence HDU - 1560(IDA*,迭代加深搜索)

    题目大意:有n个DNA序列,构造一个新的序列,使得这n个DNA序列都是它的子序列,然后输出最小长度. 题解:第一次接触IDA*算法,感觉~~好暴力!!思路:维护一个数组pos[i],表示第i个串该匹配 ...

  4. C语言 贪吃蛇

    贪吃蛇(单人版): 本人先来介绍一个函数 -- bioskey函数: int bioskey (int cmd) 参数 (cmd) 基本功能 0 返回下一个从键盘键入的值(若不键入任何值,则将等下一个 ...

  5. Apache solr velocity模块 漏洞复现

    0x01 Solr简单介绍 Solr是建立在Apache Lucene ™之上的一个流行.快速.开放源代码的企业搜索平台. Solr具有高度的可靠性,可伸缩性和容错能力,可提供分布式索引,复制和负载平 ...

  6. 科学计算包Numpy

    Numpy 用于科学计算的python模块,提供了Python中没有的数组对象,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换以及随机数生成等功能,并可与C++.FO ...

  7. <cstring>中常用的两个函数memset()和memcpy()

    <cstring>是c++对c中的<string.h>进行了重写,这两个头文件中的函数用法是一样的,所以在用的时候包含哪个头文件都行.下面介绍一下 <cstring> ...

  8. 干货福利:如何使用Python中Django模板?

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 穆胜亮 篇文章将学习如何使用Django模板.模板是在Django ...

  9. 在 Azure CentOS VM 中配置 SQL Server 2019 AG - (上)

    前文 假定您对Azure和SQL Server HA具有基础知识 假定您对Azure Cli具有基础知识 目标是在Azure Linux VM上创建一个具有三个副本的可用性组,并实现侦听器和Fenci ...

  10. 005.Ansible de palybook简单使用

    一 Ansible Playbook简介 ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写.playbook命令根据自上而下的顺序依次执行.同时,playboo ...