美文网首页
记一次 ES6 在低版本浏览器的适配过程

记一次 ES6 在低版本浏览器的适配过程

作者: Dylan_Dong | 来源:发表于2019-01-29 15:19 被阅读0次

出现的问题

在项目中使用了 ES6 的语法,比如letconst,导致在iOS 9.3.3版本的浏览器报错,但是在高版本的浏览器显示正常。

尝试解决

在确定了是由 ES6 新特性引起的报错以后,我们可以换回ES5的语法,当然这种不适合我们目前的情景。那有没有什么办法能把 ES6 在低版本浏览器中转译成ES5的语法呢?有。
目前有很多团队针对ES6的兼容问题,开发出了多种语法解析转换工具来把 ES6 转换成ES5,比较通用的解决方案有babeljsxes6-shim等,接下来我们就使用babel来做适配。

Babel

Babel 是一个转换编译器,它能将 ES6 转换成可以在浏览器中运行的代码。Babel 可以处理 ES6 的所有新语法,并且内置了 React JSX 扩展及 Flow 类型注解支持。

我们在HTML页面中直接引用babel

<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

然后在页面JS代码部分做如下修改

<script type="text/babel">

完成了上述操作以后,我们在浏览器里重新运行,这时候我们会发现如果页面只是使用了 ES6 的语法,上述转换是没有问题的,可以正常运行,但是如果使用了 ES6 的新增API,浏览器依然会报错。造成报错的原因就是 Babel默认只转换 ES6 的新语法(syntax),不转换新的API

我们需要使用babel-polyfill实现对 ES6 新API的支持

babel-polyfill

Babel 默认只转码 ES6 的新语法(syntax),而不转换新的 API,比如 SetMapsProxyReflectSymbolPromise 等全局对象,以及一些定义在全局对象上的方法(比如 Object.assignArray.from)都不会转码。

如果想让这些方法运行,必须使用 babel-polyfill,为当前环境提供一个中间层。

通过babel-polyfill可以让我们使用如下新API:

  • ArrayBuffer
  • Array.from
  • Array.of
  • Array#copyWithin
  • Array#fill
  • Array#find
  • Array#findIndex
  • Function#name
  • Map
  • Math.acosh
  • Math.hypot
  • Math.imul
  • Number.isNaN
  • Number.isInteger
  • Object.assign
  • Object.getOwnPropertyDescriptors
  • Object.is
  • Object.entries
  • Object.values
  • Object.setPrototypeOf
  • Promise
  • Reflect
  • RegExp#flags
  • Set
  • String#codePointAt
  • String#endsWith
  • String.fromCodePoint
  • String#includes
  • String.raw
  • String#repeat
  • String#startsWith
  • String#padStart
  • String#padEnd
  • Symbol
  • WeakMap
  • WeakSet

进入项目文件夹,使用npm方式安装polyfill:

npm install --save-dev babel-polyfill

在页面中引用:

<script type="text/javascript" src="node_modules/babel-polyfill/dist/polyfill.min.js"></script>

再运行页面,就不会有报错出现了,而且页面中使用新API的地方也完美的运行通过。

相关文章

  • 记一次 ES6 在低版本浏览器的适配过程

    出现的问题 在项目中使用了 ES6 的语法,比如let、const,导致在iOS 9.3.3版本的浏览器报错,但是...

  • webpack学习第九步——babel编译es6及react

    es6 在低版本浏览器程序报错 安装相关babel index.js用es6语法 修改webpack.config...

  • ES6

    ES6的开发环境搭建 现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就...

  • ES6编译为ES5方法

    现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就需要我们把ES6的语法...

  • Babel使用

    目前Chrome浏览器已经支持ES6了,但有些低版本的浏览器还是不支持ES6的语法,需要把ES6的语法自动的转变成...

  • ECMAScript 6 环境搭建

    现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就需要我们把ES6的语法...

  • SCRIPT5022: [vuex] vuex requires

    原因:低版本的IE或低版本qq浏览器不支持vue的es6语法 解决:安装babel-polyfill,让 babe...

  • ES6 基础新特性

    关于 ES6 转 ES5 兼容低版本浏览器: Babel 是一个宽泛使用的 ES6 转码器, 可以将 ES6 转为...

  • VUE音乐播放器学习笔记(1)- ( JSONP ) + ( 插

    (1) babel-polyfill 在低版本的浏览器中不能支持es6语法,所以用babel-polyfill来解...

  • ES6 学习笔记(一)

    一、开发环境的搭建 Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就需要我们...

网友评论

      本文标题:记一次 ES6 在低版本浏览器的适配过程

      本文链接:https://www.haomeiwen.com/subject/qeuxsqtx.html