Ich überprüfe die URL, um festzustellen, ob sie eine enthält oder enthält ?
, um den Hash-Pop-Status im Fenster zu steuern. Alle anderen Browser haben kein Problem, nur der 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')});
};
});
});
javascript
internet-explorer-11
ecmascript-7
Erik Grosskurth
quelle
quelle
window.location.hash
Internet Explorer 11?Antworten:
Gemäß der MDN Referenzseite ,
includes
auf Internet Explorer wird nicht unterstützt. Die einfachste Alternative ist folgendeindexOf
:quelle
IE11 implementiert String.prototype.includes. Warum also nicht die offizielle Polyfill verwenden?
Quelle: Polyfill-Quelle
quelle
Durch Hinzufügen
import 'core-js/es7/array';
zu meinem wurdepolyfill.ts
das Problem für mich behoben.quelle
Ich hatte ein ähnliches Problem mit einem Angular-Projekt. In meiner polyfills.ts musste ich beides hinzufügen:
Zusätzlich zum Aktivieren aller anderen IE 11-Standardeinstellungen. (Siehe Kommentare in polyfills.ts, wenn Winkel verwendet wird.)
Nach dem Hinzufügen dieser Importe verschwand der Fehler und meine Objektdaten wurden wie beabsichtigt ausgefüllt.
quelle
Wie in Internet Explorer wird die Javascript-Methode "Includes" nicht unterstützt, was zu dem folgenden Fehler führt
dijit.form.FilteringSelect TypeError: Objekt unterstützt keine Eigenschaft oder Methode 'include'
Daher habe ich die JavaScript-Zeichenfolgenmethode wie folgt von "Includes" in "IndexOf" geändert
quelle
Ich habe verwendet,
includes
vonLodash
denen ist wirklich ähnlich wie die native.quelle
Ich benutze ReactJs und habe es
import 'core-js/es6/string';
zu Beginn verwendetindex.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.https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md
quelle
npm i --save core-js react-app-polyfill
core-js/es6
scheint es in v3 nicht mehr zu existieren, soimport 'core-js';
wie es in Github vorgeschlagen wurde .Diese Frage und ihre Antworten führten mich zu meiner eigenen Lösung (mit Hilfe von SO), obwohl einige sagen, Sie sollten native Prototypen nicht manipulieren:
Dann habe ich einfach alles
.includes()
durch ersetzt.doesInclude()
und mein Problem wurde gelöst.quelle
.includes ()
funktioniert sowohl mit Strings als auch mit Arrays. Ihresubstring()
Lösung funktioniert nur mit Zeichenfolgen und schlägt mit Arrays fehl. Wie von anderen Personen beantwortet, ist die Verwendung vonindexOf()
anstelle vonsubstring()
besser, da dies in beiden Fällen funktioniert.