it-swarm.com.de

IE11 - Objekt unterstützt keine Eigenschaft oder Methode 'Includes' - Javascript window.location.hash

Ich überprüfe die URL, um zu sehen, ob sie ein oder enthält? um den Hash-Pop-Status im Fenster zu steuern. Alle anderen Browser haben kein Problem nur mit IE.

Der Debugger gibt diesen Fehler aus, wenn ich versuche, auf diese Art zu laden.

Ich erhalte keine Fehlermeldung, wenn ich die Seite in den Popstate lade

    $(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')});
            };
        });
});
135
Erik Grosskurth

Gemäß der MDN-Referenzseite wird includes von Internet Explorer nicht unterstützt. Die einfachste Alternative ist die Verwendung von indexOf wie folgt:

if(window.location.hash.indexOf("?") >= 0) {
    ...
}
205
GOTO 0

IE11 implementiert String.prototype.includes. Warum also nicht den offiziellen Polyfill verwenden?

  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;
      }
    };
  }

Quelle: Polyfill-Quelle

48
thiagoh

Das Hinzufügen von import 'core-js/es7/array'; zu meinem polyfill.ts hat das Problem für mich behoben.

18
JCisar

Ich habe includes von Lodash verwendet, was dem nativen sehr ähnlich ist.

3
Moacir Rosa

Wie in Internet Explorer wird die Javascript-Methode "include" nicht unterstützt, was zu dem folgenden Fehler führt

dijit.form.FilteringSelect TypeError: Objekt unterstützt keine Eigenschaften oder Methoden 'include'

Also habe ich die JavaScript-String-Methode von "Includes" zu "IndexOf" wie folgt geändert

//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");
}
2
satish hiremath

Ich verwende ReactJs und verwende import 'core-js/es6/string'; am Anfang von index.js, um mein Problem zu lösen.

Ich verwende auch import 'react-app-polyfill/ie11';, um das Ausführen von React in IE11 zu unterstützen.

react-App-Polyfill

Dieses Paket enthält Polyfills für verschiedene Browser. Es enthält Mindestanforderungen und häufig verwendete Sprachfunktionen, die von Create React App-Projekten verwendet werden.

https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md

1
Bhushan Babar

Ich hatte ein ähnliches Problem mit einem Angular-Projekt. In meinen polyfills.ts musste ich beides hinzufügen: 

    import "core-js/es7/array";
    import "core-js/es7/object";

Zusätzlich zur Aktivierung aller anderen IE 11 Standardeinstellungen. (Siehe Kommentare in polyfills.ts, wenn Sie winkels verwenden.)

Nach dem Hinzufügen dieser Importe ging der Fehler weg und meine Objektdaten wurden wie vorgesehen aufgefüllt.

1
bsheps

Diese Frage und ihre Antworten führten mich zu meiner eigenen Lösung (mit Hilfe von SO), obwohl einige sagen, Sie sollten sich nicht an nativen Prototypen manipulieren:

  // IE does not support .includes() so I'm making my own:
  String.prototype.doesInclude=function(needle){
    return this.substring(needle) != -1;
  }

Dann habe ich einfach alles .includes() durch .doesInclude() ersetzt und mein Problem wurde gelöst.

0
TecBrat