Je vérifie l'URL pour voir si elle contient ou inclut un ?
pour contrôler l'état pop de hachage dans la fenêtre. Tous les autres navigateurs n'ont pas de problème, seulement IE.
Le débogueur me donne cette erreur lorsque j'essaye de charger de cette manière:
L'objet ne prend pas en charge la propriété ou la méthode '
includes
'
Je n'obtiens aucune erreur lorsque je charge la page via le 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
la source
la source
window.location.hash
Internet Explorer 11?Réponses:
Selon la page de référence MDN ,
includes
n'est pas pris en charge sur Internet Explorer. L'alternative la plus simple est d'utiliserindexOf
, comme ceci:la source
IE11 implémente String.prototype.includes, alors pourquoi ne pas utiliser le Polyfill officiel?
Source: source polyfill
la source
L'ajout
import 'core-js/es7/array';
à mon apolyfill.ts
corrigé le problème pour moi.la source
J'ai eu un problème similaire avec un projet angulaire. Dans mes polyfills.ts, j'ai dû ajouter les deux:
En plus d'activer toutes les autres valeurs par défaut d'IE 11. (Voir les commentaires dans polyfills.ts si vous utilisez angular)
Après avoir ajouté ces importations, l'erreur a disparu et mes données d'objet ont été remplies comme prévu.
la source
Comme dans Internet Explorer, la méthode javascript "comprend" ne prend pas en charge ce qui conduit à l'erreur comme ci-dessous
dijit.form.FilteringSelect TypeError: l'objet ne prend pas en charge la propriété ou la méthode 'includes'
J'ai donc changé la méthode de chaîne JavaScript de "includes" à "indexOf" comme ci-dessous
la source
J'ai utilisé à
includes
partir deLodash
laquelle est vraiment similaire à l'indigène.la source
J'utilise ReactJs et je l'utilise
import 'core-js/es6/string';
au débutindex.js
pour résoudre mon problème.J'utilise également
import 'react-app-polyfill/ie11';
pour prendre en charge l'exécution de React dans IE11.https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md
la source
npm i --save core-js react-app-polyfill
core-js/es6
semble ne plus exister dans la v3, doncimport 'core-js';
comme suggéré dans Github .Cette question et ses réponses m'ont conduit à ma propre solution (avec l'aide de SO), même si certains disent que vous ne devriez pas altérer les prototypes natifs:
Ensuite, j'ai tout remplacé
.includes()
par.doesInclude()
et mon problème a été résolu.la source
.includes ()
fonctionne à la fois sur les chaînes et les tableaux. Votresubstring()
solution fonctionne uniquement avec des chaînes et échoue avec des tableaux. Comme d'autres personnes ont répondu, utiliserindexOf()
plutôt que desubstring()
est préférable car cela fonctionne dans les deux cas.