Ответ 1
В соответствии с справочной страницей MDN includes
не поддерживается в Internet Explorer. Простейшей альтернативой является использование indexOf
, например:
if(window.location.hash.indexOf("?") >= 0) {
...
}
Я проверяю URL, чтобы увидеть, содержит ли он или нет ?
в нем для управления состоянием хэша в окне. Все остальные браузеры не имеют проблемы, только IE.
Отладчик выдает мне эту ошибку, когда я пытаюсь загрузить таким образом:
Объект не поддерживает свойство или метод
includes
Я не получаю ошибку при загрузке страницы через popstate.
$(document).ready(function(e) {
if(window.location.hash) {
var hash;
if(window.location.hash.includes("?")) {
alert('I have a ?');
hash = window.location.hash.substring(window.location.hash.indexOf('#') + 0,window.location.hash.indexOf('?'));
}else {
hash = window.location.hash;
};
if (hash=="#DRS" || hash=="#DRP" || hash=="#DFFI" || hash=="#DCI" || hash=="#DCP" || hash=="#DRP" || hash=="#DRMA" || hash=="#EICS" || hash=="#ORG"){
$(hash+'Content').addClass('pageOn').removeClass('pageOff');
}else {
$('#homeContent').addClass('pageOn').removeClass('pageOff');
};
} else {
$('#homeContent').addClass('pageOn').removeClass('pageOff');
}
$(window).on('popstate', function() {
var hash;
if(window.location.hash.includes("?")) {
hash = window.location.hash.substring(window.location.hash.indexOf('#') + 0,window.location.hash.indexOf('?'));
}else {
hash = window.location.hash;
};
if (hash=="#DRS" || hash=="#DRP" || hash=="#DFFI" || hash=="#DCI" || hash=="#DCP" || hash=="#DRP" || hash=="#DRMA" || hash=="#EICS" || hash=="#ORG"){
$(this).navigate({target: $(hash+'Content')});
if(window.location.hash.includes("?")) {
}else{
location.href = location.href+'?';
}
}else {
$(this).navigate({target: $('#homeContent')});
};
});
});
В соответствии с справочной страницей MDN includes
не поддерживается в Internet Explorer. Простейшей альтернативой является использование indexOf
, например:
if(window.location.hash.indexOf("?") >= 0) {
...
}
IE11 реализует String.prototype.includes, поэтому почему бы не использовать официальный Polyfill?
if (!String.prototype.includes) {
String.prototype.includes = function(search, start) {
if (typeof start !== 'number') {
start = 0;
}
if (start + search.length > this.length) {
return false;
} else {
return this.indexOf(search, start) !== -1;
}
};
}
Источник: polyfill источник
Добавление import 'core-js/es7/array';
чтобы мои polyfill.ts
исправили проблему для меня.
Как и в Internet Explorer, метод javascript "include" не поддерживает, что приводит к ошибке, как показано ниже
dijit.form.FilteringSelect TypeError: Объект не поддерживает свойство или метод "include"
Поэтому я изменил строковый метод JavaScript с "include" на "indexOf", как показано ниже
//str1 doesn't match str2 w.r.t index, so it will try to add object
var str1="acd", str2="b";
if(str1.indexOf(str2) == -1)
{
alert("add object");
}
else
{
alert("object not added");
}
Я использовал includes
от Lodash
, который действительно похож на native.
У меня была похожая проблема с Angular-проектом. В мои polyfills.ts я должен был добавить оба:
import "core-js/es7/array";
import "core-js/es7/object";
В дополнение к включению всех остальных IE 11 по умолчанию. (См. Комментарии в polyfills.ts, если используется угловая)
После добавления этого импорта ошибка исчезла, и данные моего объекта заполнились, как и предполагалось.
Я использую ReactJs и использовал import 'core-js/es6/string';
в начале index.js
чтобы решить мою проблему.
Я также использую import 'react-app-polyfill/ie11';
для поддержки запуска React в IE11.
реагируют-приложение-polyfill
Этот пакет включает в себя полифилы для различных браузеров. Он включает минимальные требования и часто используемые языковые функции, используемые проектами Create React App.
https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md
Этот вопрос и его ответы привели меня к собственному решению (с помощью SO), хотя некоторые говорят, что вы не должны вмешиваться в собственные прототипы:
// IE does not support .includes() so I'm making my own:
String.prototype.doesInclude=function(needle){
return this.substring(needle) != -1;
}
Затем я просто заменил все .includes()
на .doesInclude()
, и моя проблема была решена.
Извините, этот ответ может получить downvotes, но я хотел сказать, что я столкнулся с подобной проблемой при генерации события Keyboard в IE и отправки его в поле ввода.
Итак, переключившись на jQuery и он отлично работает, jquery заботится обо всех внутренних деталях.