Em que circunstâncias é window.console.log
definida no Internet Explorer 9?
Mesmo quando window.console.log
definido window.console.log.apply
e window.console.log.call
indefinido. Por que é isso?
[Pergunta relacionada ao IE8: O que aconteceu com o console.log no IE8? .]
javascript
logging
internet-explorer-9
mloughran
fonte
fonte
Respostas:
No Internet Explorer 9 (e 8), o
console
objeto é exposto apenas quando as ferramentas do desenvolvedor são abertas para uma guia específica. Se você ocultar a janela de ferramentas do desenvolvedor para essa guia, oconsole
objeto permanecerá exposto para cada página em que você navegar. Se você abrir uma nova guia, também deverá abrir as ferramentas do desenvolvedor para essa guia para que oconsole
objeto seja exposto.O
console
objeto não faz parte de nenhum padrão e é uma extensão do Modelo de Objeto do Documento. Como outros objetos DOM, ele é considerado um objeto host e não é necessário herdarObject
, nem seus métodosFunction
, como as funções e objetos nativos do ECMAScript. Esse é o motivoapply
e nãocall
está definido nesses métodos. No IE 9, a maioria dos objetos DOM foi aprimorada para herdar dos tipos nativos de ECMAScript. Como as ferramentas do desenvolvedor são consideradas uma extensão do IE (embora uma extensão interna), elas claramente não receberam as mesmas melhorias que o restante do DOM.Pelo que vale a pena, você ainda pode usar alguns
Function.prototype
métodos emconsole
métodos com um pouco debind()
mágica:fonte
console
objeto do Firebug .Uma solução simples para esse problema do console.log é definir o seguinte no início do seu código JS:
Isso funciona para mim em todos os navegadores. Isso cria uma função fictícia para console.log quando o depurador não está ativo. Quando o depurador está ativo, o método console.log é definido e é executado normalmente.
fonte
Sei que essa é uma pergunta muito antiga, mas sinto que isso adiciona uma alternativa valiosa de como lidar com o problema do console. Coloque o código a seguir antes de qualquer chamada para o console. * (Para o seu primeiro script).
Referência:
https://github.com/h5bp/html5-boilerplate/blob/v5.0.0/dist/js/plugins.js
fonte
console.log é definido apenas quando o console está aberto. Se você deseja procurá-lo em seu código, verifique-o na propriedade window
isso lança uma exceção no IE9 e não funcionará corretamente. Não faça isso
fonte
Depois de ler o artigo do comentário de Marc Cliament acima, agora alterei minha função console.log para todos os fins, para vários navegadores, para ficar assim:
fonte
Function.prototype.apply.call(console.log, console, arguments);
Gostaria de mencionar que o IE9 não gera o erro se você usar o console.log com as ferramentas de desenvolvedor fechadas em todas as versões do Windows. No XP, sim, mas no Windows 7, não. Portanto, se você largou o suporte ao WinXP em geral, poderá usar o console.log diretamente.
fonte
E se...
fonte