我在IE11中的项目有些麻烦(这是反应项目,我使用create-react-app prod build)。它在其他浏览器和IE11中都可以正常工作,除非我在IE11中单击精确链接到一个路由(其他路由工作),它会抛出错误“对象不支持属性或方法'包含'”。我添加了'babel-polyfill'但问题仍然存在,但是如果我,例如,不仅仅是加载页面,而是重新加载它然后单击该链接,或者当我直接加载该链接页面时,它工作正常。
我不在我的代码中使用'includes',假设它在我使用的那些库中使用。
可能有人知道,为什么在加载页面后和重新加载后它无法正常工作。
感谢您的帮助。
答案 0 :(得分:2)
它似乎是通过this插件与其余的babel分开处理的。
includes
是一个Javascript函数,用于确定项目是否存在于数组中,并且在Internet Explorer中不可用。请参阅下面的文档/图表。 (显然,默认情况下它不属于babel的一部分,因为在确定变量是否为数组时存在一些困难。在babel repos中存在2年以上的问题。)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
这些文档的浏览器兼容性图表的一部分:
答案 1 :(得分:1)
在使用react-select v2的create-react-app项目中,我遇到了一些错误,因此包括air-bnb's bundle:
yarn add airbnb-js-shims
然后将这一行添加到我的代码中:
import 'airbnb-js-shims';
答案 2 :(得分:0)
在所有导入内容的顶部添加以下功能。
if (!Array.prototype.includes) {
Object.defineProperty(Array.prototype, 'includes', {
value: function (searchElement, fromIndex) {
if (this == null) {
throw new TypeError('"this" is null or not defined');
}
// 1. Let O be ? ToObject(this value).
var o = Object(this);
// 2. Let len be ? ToLength(? Get(O, "length")).
var len = o.length >>> 0;
// 3. If len is 0, return false.
if (len === 0) {
return false;
}
// 4. Let n be ? ToInteger(fromIndex).
// (If fromIndex is undefined, this step produces the value 0.)
var n = fromIndex | 0;
// 5. If n ≥ 0, then
// a. Let k be n.
// 6. Else n < 0,
// a. Let k be len + n.
// b. If k < 0, let k be 0.
var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
function sameValueZero(x, y) {
return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
}
// 7. Repeat, while k < len
while (k < len) {
// a. Let elementK be the result of ? Get(O, ! ToString(k)).
// b. If SameValueZero(searchElement, elementK) is true, return true.
if (sameValueZero(o[k], searchElement)) {
return true;
}
// c. Increase k by 1.
k++;
}
// 8. Return false
return false;
}
});
}