Sprawdzam adres URL, aby zobaczyć, czy zawiera lub zawiera ?
w nim znak , aby kontrolować stan skrótu w oknie. Wszystkie inne przeglądarki nie mają problemu, tylko IE.
Debugger wyświetla ten błąd, gdy próbuję załadować w ten sposób:
Obiekt nie obsługuje właściwości ani metody '
includes
'
Nie pojawia się żaden błąd, kiedy ładuję stronę przez 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')});
};
});
});
javascript
internet-explorer-11
ecmascript-7
Erik Grosskurth
źródło
źródło
window.location.hash
Internet Explorer 11?Odpowiedzi:
Według strony referencyjnej MDN ,
includes
nie jest obsługiwane w przeglądarce Internet Explorer. Najprostszą alternatywą jest użycieindexOf
:źródło
IE11 implementuje String.prototype.includes, więc dlaczego nie skorzystać z oficjalnego narzędzia Polyfill?
Źródło: źródło polyfill
źródło
Dodanie
import 'core-js/es7/array';
do mojegopolyfill.ts
rozwiązało problem dla mnie.źródło
Miałem podobny problem z projektem Angular. W moich polyfills.ts musiałem dodać oba:
Oprócz włączenia wszystkich pozostałych ustawień domyślnych IE 11. (Zobacz komentarze w polyfills.ts, jeśli używasz kątowych)
Po dodaniu tych importów błąd zniknął, a moje dane Object zostały wypełnione zgodnie z zamierzeniami.
źródło
Podobnie jak w przeglądarce Internet Explorer, metoda javascript „obejmuje” nie obsługuje, co prowadzi do błędu, jak poniżej
dijit.form.FilteringSelect TypeError: Obiekt nie obsługuje właściwości lub metody „zawiera”
Więc zmieniłem metodę ciągu JavaScript z „obejmuje” na „indexOf”, jak poniżej
źródło
Skorzystałem
includes
zLodash
którego jest bardzo podobny do rodzimego.źródło
Używam ReactJs i używam go
import 'core-js/es6/string';
na początkuindex.js
do rozwiązania mojego problemu.Używam również
import 'react-app-polyfill/ie11';
do obsługi uruchamiania React w IE11.https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md
źródło
npm i --save core-js react-app-polyfill
core-js/es6
wydaje się , że nie istnieje już w wersji 3, więc takimport 'core-js';
jak sugerowano w Github .To pytanie i odpowiedzi na nie doprowadziły mnie do własnego rozwiązania (z pomocą SO), chociaż niektórzy twierdzą, że nie powinieneś majstrować przy natywnych prototypach:
Potem po prostu wymienić wszystkie
.includes()
z.doesInclude()
i mój problem został rozwiązany.źródło
.includes ()
działa zarówno na łańcuchach, jak i na tablicach. Twojesubstring()
rozwiązanie działa tylko w przypadku ciągów i kończy się niepowodzeniem w przypadku tablic. Jak odpowiedziały inne osoby, używanieindexOf()
zamiastsubstring()
jest lepsze, ponieważ działa to w obu przypadkach.