Bug do IE9 - JavaScript só funciona depois de abrir as ferramentas do desenvolvedor uma vez.
Nosso site oferece downloads gratuitos de pdf para os usuários e possui uma função simples "digite a senha para fazer o download". No entanto, ele não funciona no Internet Explorer.
Você pode ver por si mesmo neste exemplo .
O passe de download é "makeuseof". Em qualquer outro navegador, ele funciona bem. No IE, os dois botões não fazem nada.
A coisa mais curiosa que achei é que, se você abrir e fechar a barra de ferramentas do desenvolvedor com F12, tudo de repente começa a funcionar.
Tentamos o modo de compatibilidade e nada faz a diferença.
Como faço para isso funcionar no Internet Explorer?
javascript
internet-explorer
internet-explorer-9
James Bruce
fonte
fonte
gulp-strip-debug
. Ele remove todos osconsole.*
métodos, ótimos para compilações de produção ou testes no IE.console
, mas ao meu uso de angular e cache de solicitações get. Veja as respostas aqui e aqui para mais.Respostas:
Parece que você pode ter algum código de depuração no seu javascript.
A experiência que você está descrevendo é típica de código que contém
console.log()
ou qualquer outraconsole
funcionalidade.O
console
objeto é ativado apenas quando a barra de ferramentas Dev é aberta. Antes disso, a chamada do objeto do console resultaria na notificação deundefined
. Depois que a barra de ferramentas for aberta, o console existirá (mesmo que a barra de ferramentas seja fechada posteriormente), para que as chamadas do console funcionem.Existem algumas soluções para isso:
O mais óbvio é passar pelo seu código removendo referências a
console
. Você não deveria deixar coisas assim no código de produção.Se você deseja manter as referências do console, você pode agrupá-las em uma
if()
instrução ou em alguma outra condição que verifique se o objeto do console existe antes de tentar chamá-lo.fonte
if(!console) {console={}; console.log = function(){};}
if(!console)
causará o mesmo erro - ele deve ler-seif(!window.console)
O HTML5 Boilerplate possui um bom código pré-fabricado para corrigir problemas no console:
Como @ mais apontado nos comentários, a versão mais recente está disponível na página do GitHub
fonte
src
sub-dir: github.com/h5bp/html5-boilerplate/blob/master/src/js/plugins.jsAqui está outro motivo possível além do
console.log
problema (pelo menos no IE11):Quando o console não está aberto, o IE faz um cache bastante agressivo, portanto, verifique se todas as
$.ajax
chamadas ouXMLHttpRequest
chamadas têm cache definido como false.Por exemplo:
Quando o console do desenvolvedor está aberto, o armazenamento em cache é menos agressivo. Parece ser um bug (ou talvez um recurso?)
fonte
Isso resolveu meu problema depois que eu fiz uma pequena alteração. Eu adicionei o seguinte na minha página html para corrigir o problema do IE9:
fonte
Além do
console
problema de uso mencionado na resposta aceita e outras, há pelo menos outro motivo pelo qual, às vezes, as páginas no Internet Explorer funcionam apenas com as ferramentas de desenvolvedor ativadas.Quando o Developer Tools está ativado, o IE realmente não usa seu cache HTTP (pelo menos por padrão no IE 11), como no modo normal.
Isso significa que se o seu site ou página tiver um problema de armazenamento em cache (se o cache for maior do que deveria, por exemplo - esse foi o meu caso), você não verá esse problema no modo F12. Portanto, se o javascript fizer algumas solicitações AJAX em cache, elas podem não funcionar como esperado no modo normal e funcionar bem no modo F12.
fonte
Eu acho que isso poderia ajudar, adicionando isso antes de qualquer tag de javascript:
fonte
try catch
detectar que uma variável existe é uma má ideia. Não é apenas lento, mas se você tiver mais de uma instrução no bloco try, poderá obter uma exceção por um motivo diferente. Não use isso, pelo menos usoif (typeof console == 'undefined')
Se você estiver usando o AngularJS versão 1.X, poderá usar o serviço $ log em vez de usar o console.log diretamente.
https://docs.angularjs.org/api/ng/service/$log
Então, se você tem algo semelhante a
você pode substituí-lo por
O Angular 2+ não possui nenhum serviço de log interno .
fonte
Se você estiver usando
angular
e ie9, 10
ouedge
use:Para desativar completamente
cache
.fonte
Isso aconteceu no IE 11 para mim. E eu estava chamando a função jquery .load. Então, eu fiz da maneira antiga e coloquei algo no URL para desativar o cache.
fonte
Eu tenho mais uma alternativa para as soluções oferecidas por runas e todotresde que também evitam as armadilhas discutidas nos comentários à resposta de Spudley :
É um pouco desajeitado, mas por outro lado é conciso e abrange todos os métodos de registro cobertos na resposta das runas e tem a enorme vantagem de poder abrir a janela do console do IE a qualquer momento e os logs entrarem.
fonte
Encontramos o problema no IE 11 no Windows 7 e no Windows 10. Descobrimos qual era exatamente o problema ativando os recursos de depuração do IE (IE> Opções da Internet> guia Avançado> Navegação> Desmarcar a opção Desativar depuração de script (Internet Explorer) ). Esse recurso geralmente é verificado em nosso ambiente pelos administradores do domínio.
O problema foi porque estávamos usando o
console.debug(...)
método dentro do nosso código JavaScript. A suposição feita pelo desenvolvedor (eu) era que eu não queria nada escrito se o console do Developer Tools do cliente não estivesse explicitamente aberto. Enquanto o Chrome e o Firefox pareciam concordar com essa estratégia, o IE 11 não gostou nem um pouco. Ao alterar todas asconsole.debug(...)
instruções paraconsole.log(...)
instruções, conseguimos continuar registrando informações adicionais no console do cliente e visualizando-as quando estavam abertas, mas, caso contrário, as escondíamos do usuário comum.fonte
Eu coloquei a resolução e corrijo o meu problema. Parece que a solicitação AJAX que eu coloquei no meu JavaScript não estava sendo processada porque minha página estava com algum problema de cache. se o seu site ou página tiver um problema de armazenamento em cache, você não o verá no modo de desenvolvedores / F12. meu JavaScript em cache AJAX solicita que ele não funcione conforme o esperado e quebre a execução, que F12 não tem nenhum problema. Então, acabei de adicionar um novo parâmetro para tornar o cache falso.
Parece que o IE precisa especificamente que isso seja falso, para que a atividade AJAX e javascript funcionem bem.
fonte