IE11-объект не поддерживает свойство или метод "включает" - окно javascript.местоположение.хэш
Я проверяю url, чтобы увидеть, если он содержит или включает ? в нем для управления состоянием хэша pop в окне. Все другие браузеры не имеют проблемы только IE.
отладчик дает мне эту ошибку, когда я пытаюсь загрузить таким образом объект не поддерживает свойство или метод 'includes'
Я не получаю никаких ошибок при загрузке страницы в tghrough 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')});
};
});
});
8 ответов:
По словам справочная страница MDN,
includes
Не поддерживается в Internet Explorer. Самая простая альтернатива-использоватьindexOf
, например:if(window.location.hash.indexOf("?") >= 0) { ... }
IE11 реализует строку.прототип.включает в себя так почему бы не использовать официальный полифилл?
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 source
я использовал
includes
СLodash
который действительно похож на родной.
Как и в Internet Explorer, метод javascript "включает" не поддерживает, что приводит к ошибке, как показано ниже
dijit.форма.FilteringSelect TypeError: объект не поддерживает свойство или метод 'includes'
поэтому я изменил метод строки JavaScript с "includes" на "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"); }
У меня была аналогичная проблема, и это решило мою проблему большое время! https://polyfill.io/
этот вопрос и его ответы привели меня к моему собственному решению (с помощью SO), хотя некоторые говорят, что вы не должны вмешиваться в родные прототипы:
// IE does not support .includes() so I'm making my own: String.prototype.doesInclude=function(needle){ return this.substring(needle) != -1; }
тогда я просто заменил все
.includes()
С.doesInclude()
и моя проблема была решена.