当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 详解React项目中碰到的IE问题

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

2019年05月28日  | 移动技术网IT编程  | 我要评论

最近接手一个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又出问题了。。。

犯了stackoverflow和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
}

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网