详解React项目中碰到的IE问题
程序员文章站
2023-08-29 22:11:28
最近接手一个react项目,在ie下碰到了俩问题
ie11报错如下:
跟踪一下之后,发现是一些其他的npm包里面用到了startswith这个方法,可以自己po...
最近接手一个react项目,在ie下碰到了俩问题
ie11报错如下:
跟踪一下之后,发现是一些其他的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又出问题了。。。
犯了*和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 }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。