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
}
相關文章
相關標籤/搜索