Die Verwendung von „window.location.hash.includes“ löst „Objekt unterstützt Eigenschaft oder Methode ‚includes‘“ in IE11 nicht aus

Lesezeit: 4 Minuten

Benutzer-Avatar
Erik Großkurth

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

Der Debugger gibt mir diesen Fehler, wenn ich versuche, auf diese Weise zu laden:

Objekt unterstützt keine Eigenschaft oder Methode ‘includes

Ich erhalte keine Fehlermeldung, wenn ich die Seite über 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')});
            };
        });
});

  • Welchen Wert hat window.location.hash im internetexplorer 11?

    – Null

    29. Juni 2015 um 15:20 Uhr

Laut dem MDN-Referenzseite, includes wird vom Internet Explorer nicht unterstützt. Die einfachste Alternative ist die Verwendung indexOfso was:

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

  • OK, nun kann ich das nicht zum Laufen bringen if(window.location.hash.indexOf(“?”) >= 0) { // nichts tun }else{ location.href = location.href+’?’; }

    – Erik Großkurth

    29. Juni 2015 um 15:43 Uhr

  • Ich muss ein hinzufügen? an das Ende der URL, wenn die URL noch keine hat

    – Erik Großkurth

    29. Juni 2015 um 15:43 Uhr

  • Ich weiß, dass dies eine alte Frage und Antwort ist, aber String.prototype.includes scheint für mich unter Windows 10 IE 11 zu funktionieren.

    – Troxwalt

    20. Juni 2018 um 20:05 Uhr

  • @troxwalt Das ist gut zu hören, aber es funktioniert immer noch nicht unter Windows 7 IE11!

    – nevada_scout

    2. August 2018 um 13:31 Uhr

  • Wenn du bist Reagierening, können Sie Polyfill-Pakete verwenden und vermeiden, Polyfills manuell hinzuzufügen …

    – CPHPython

    5. April 2019 um 10:09 Uhr

IE11 implementiert String.prototype.includes, warum also nicht das offizielle 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

  • Sie können auch die Polyfill von Core-js verwenden, die Sie hier finden: github.com/zloirock/core-js#stage-4-proposals

    – David Barreto

    10. Januar 2018 um 19:20 Uhr

  • @DavidBarreto in der Tat! Und für React wurde hier eine neuere Antwort hinzugefügt.

    – CPHPython

    5. April 2019 um 10:03 Uhr

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

  • Dies wurde vor langer Zeit gepostet, aber vielleicht kann dies jemandem in den neueren Frameworks irgendwie helfen, aber ich denke, die ausgewählte Antwort sollte für alles außerhalb spezieller Anwendungsfälle ausreichen.

    – Erik Großkurth

    3. Oktober 2018 um 16:44 Uhr

  • importiere „core-js/es/array“; ab 2020

    – timhc22

    5. März 2020 um 12:01 Uhr

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

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

Zusätzlich zum Aktivieren aller anderen IE 11-Standardeinstellungen. (Siehe Kommentare in polyfills.ts bei Verwendung von eckig)

Nach dem Hinzufügen dieser Importe verschwand der Fehler und meine Objektdaten wurden wie beabsichtigt ausgefüllt.

Benutzer-Avatar
zufrieden stellenmath

Wie im Internet Explorer wird die Javascript-Methode „includes“ nicht unterstützt, was zu dem folgenden Fehler führt

dijit.form.FilteringSelect TypeError: Objekt unterstützt Eigenschaft oder Methode ‘includes’ nicht

Also habe ich die JavaScript-String-Methode wie unten beschrieben von „includes“ in „indexOf“ 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");
}

Benutzer-Avatar
Moacir Rosa

Ich habe verwendet includes aus Lodash was dem Eingeborenen sehr ähnlich ist.

Benutzer-Avatar
BeeBee8

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

Ich benutze auch import 'react-app-polyfill/ie11'; zur Unterstützung der Ausführung von React in IE11.

reagieren-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

  • Ich habe angefangen, alle Funktionen, die in der IE11-Konsole fehlschlagen, manuell zu füllen … Ich weiß Ihre zeitsparende Antwort wirklich zu schätzen. Um diese 2 Pakete auf einmal zu Ihrem hinzuzufügen Paket.json: npm i --save core-js react-app-polyfill

    – CPHPython

    5. April 2019 um 10:02 Uhr

  • Übrigens, core-js/es6 scheint in v3 nicht mehr zu existieren, also eben import 'core-js'; wie in Github vorgeschlagen.

    – CPHPython

    5. April 2019 um 10:14 Uhr

1286580cookie-checkDie Verwendung von „window.location.hash.includes“ löst „Objekt unterstützt Eigenschaft oder Methode ‚includes‘“ in IE11 nicht aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy