Estou verificando o URL para ver se ele contém ou inclui um ?
para controlar o estado do pop-up na janela. Todos os outros navegadores não estão tendo problemas, apenas o IE.
O depurador me dá esse erro quando tento carregar desta maneira:
O objeto não suporta propriedade ou método '
includes
'
Não recebo nenhum erro ao carregar a página no 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
fonte
fonte
window.location.hash
Internet Explorer 11?Respostas:
De acordo com a página de referência do MDN ,
includes
não há suporte para o Internet Explorer. A alternativa mais simples é usarindexOf
, assim:fonte
O IE11 implementa String.prototype.includes, por que não usar o Polyfill oficial?
Fonte: fonte polyfill
fonte
Adicionando
import 'core-js/es7/array';
ao meupolyfill.ts
corrigido o problema para mim.fonte
Eu tive um problema semelhante com um projeto Angular. No meu polyfills.ts eu tinha que adicionar os dois:
Além de ativar todos os outros padrões do IE 11. (Veja os comentários em polyfills.ts se estiver usando angular)
Depois de adicionar essas importações, o erro desapareceu e meus dados do Object foram preenchidos conforme pretendido.
fonte
Como no Internet Explorer, o método javascript "includes" não suporta o que leva ao erro, conforme abaixo
dijit.form.FilteringSelect TypeError: O objeto não suporta a propriedade ou o método 'includes'
Então, eu mudei o método de string JavaScript de "includes" para "indexOf" como abaixo
fonte
Eu usei a
includes
partir doLodash
qual é realmente semelhante ao nativo.fonte
Estou usando o ReactJs e usado
import 'core-js/es6/string';
no inícioindex.js
para resolver meu problema.Também estou usando
import 'react-app-polyfill/ie11';
para dar suporte à execução do React no IE11.https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md
fonte
npm i --save core-js react-app-polyfill
core-js/es6
parece não existir mais na v3, assimimport 'core-js';
como sugerido no Github .Esta pergunta e suas respostas me levaram à minha própria solução (com a ajuda do SO), embora alguns digam que você não deve mexer com protótipos nativos:
Então eu apenas substituiu todos
.includes()
com.doesInclude()
e meu problema foi resolvido.fonte
.includes ()
funciona em cadeias de caracteres e matrizes. Suasubstring()
solução funciona apenas com seqüências de caracteres e falha com matrizes. Conforme respondido por outras pessoas, usar emindexOf()
vez desubstring()
é melhor porque isso funciona nos dois casos.