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 заботится обо всех внутренних деталях.


добавлять import 'core-js/es7/array'; мой polyfill.ts Исправлена проблема для меня.