React项目中碰到的IE问题

最近接手一个React项目,在IE下碰到了俩问题git

IE11报错以下:
图片描述es6

跟踪一下以后,发现是一些其余的npm包里面用到了startsWith这个方法,能够本身polyfill一下:github

if (!String.prototype.startsWith) {
  String.prototype.startsWith = function (search, pos) {
    return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search
  }
}

不过加prototype的方法毕竟很差,能够经过引入@babel/polyfill解决,在入口文件中引入import '@babel/polyfill';npm

IE11问题解决后,IE10又出问题了。。。
图片描述babel

犯了stackoverflow和github的不少帖子以后,在这个帖子里找到,发现是Object.setPrototypeOf的问题,Object.setPrototypeOf说是支持了IE9-11, 实际在源码里只实现了11+(https://github.com/paulmillr/...ui

解决办法能够是在polyfill url后加上excludes=Object.setPrototypeOf, 或者本身实现Object.setPrototypeOf方法,我这里引入了一个库setprototypeof,而后在入口文件中加上Object.setPrototypeOf = require('setprototypeof');this

其实这个库里的实现代码很是少, 能够简单看下url

'use strict'
/* eslint no-proto: 0 */
module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties)

function setProtoOf (obj, proto) {
  obj.__proto__ = proto
  return obj
}

function mixinProperties (obj, proto) {
  for (var prop in proto) {
    if (!obj.hasOwnProperty(prop)) {
      obj[prop] = proto[prop]
    }
  }
  return obj
}
相关文章
相关标签/搜索