欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解React项目中碰到的IE问题

程序员文章站 2022-05-29 14:49:54
最近接手一个react项目,在ie下碰到了俩问题 ie11报错如下: 跟踪一下之后,发现是一些其他的npm包里面用到了startswith这个方法,可以自己po...

最近接手一个react项目,在ie下碰到了俩问题

ie11报错如下:

详解React项目中碰到的IE问题

跟踪一下之后,发现是一些其他的npm包里面用到了startswith这个方法,可以自己polyfill一下:

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';

ie11问题解决后,ie10又出问题了。。。

详解React项目中碰到的IE问题

犯了*和github的很多帖子之后,在这个帖子里找到,发现是object.setprototypeof的问题,object.setprototypeof说是支持了ie9-11, 实际在源码里只实现了11+(https://github.com/paulmillr/es6-shim/blame/master/readme.md#l78)

解决办法可以是在polyfill url后加上excludes=object.setprototypeof, 或者自己实现object.setprototypeof方法,我这里引入了一个库,然后在入口文件中加上object.setprototypeof = require('setprototypeof');

其实这个库里的实现代码非常少, 可以简单看下

'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
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。