IE11-Object не поддерживает свойство или метод "includes" - javascript window.местоположение.хэш
Я проверяю url, чтобы узнать, содержит ли он или включает a ? в нем для управления состоянием hash pop в окне. Все другие браузеры не имеют проблемы только IE.
отладчик дает мне эту ошибку, когда я пытаюсь загрузить таким образом, объект не поддерживает свойство или метод "включает"
Я не получаю ошибок при загрузке страницы в 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
я использовал 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()
и моя проблема была решена.
Я столкнулся с аналогичной проблемой при создании события клавиатуры в IE и отправке его в поле ввода.
поэтому переключился на jQuery, и он работает нормально, jQuery заботится обо всех внутренних деталях.