De acordo com este post , estava na versão beta, mas não está no lançamento?
javascript
logging
internet-explorer-8
console
leeand00
fonte
fonte
console.log
é lá em IE8, mas oconsole
objeto não é criado até que você DevTools abertos. Portanto, uma chamada paraconsole.log
pode resultar em um erro, por exemplo, se ocorrer no carregamento da página antes que você tenha a chance de abrir as ferramentas de desenvolvimento. A resposta vencedora aqui explica mais detalhadamente.Respostas:
Ainda melhor para o fallback é o seguinte:
fonte
O console.log estará disponível somente depois que você abrir as Ferramentas do desenvolvedor (F12 para alternar entre abrir e fechar). O engraçado é que, depois de abri-lo, você pode fechá-lo e ainda publicá-lo através das chamadas console.log, e elas serão vistas quando você o reabrir. Estou pensando que isso é um tipo de bug e pode ser corrigido, mas veremos.
Provavelmente vou usar algo assim:
e ainda mais simples:
fonte
alert
é mau. Alguns códigos se comportam de maneira diferente quando os alertas são usados porque o documento perde o foco, tornando os bugs ainda mais difíceis de diagnosticar ou criando aqueles que não existiam antes. Além disso, se você acidentalmente deixar umconsole.log
no seu código de produção, é benigno (supondo que ele não exploda) - apenas registra silenciosamente no console. Se você acidentalmente deixar umalert
no seu código de produção, a experiência do usuário será arruinada.Esta é a minha opinião sobre as várias respostas. Eu realmente queria ver as mensagens registradas, mesmo que não tivesse o console do IE aberto quando elas foram acionadas, então as empurro para uma
console.messages
matriz criada por mim. Também adicionei uma funçãoconsole.dump()
para facilitar a visualização de todo o log.console.clear()
esvaziará a fila de mensagens.Essas soluções também "manipulam" os outros métodos do console (que eu acredito que todos se originam da API do Firebug Console )
Finalmente, essa solução está na forma de um IIFE , portanto, não polui o escopo global. O argumento da função de fallback é definido na parte inferior do código.
Eu apenas o solto no meu arquivo JS principal, que está incluído em todas as páginas, e esqueço.
Algumas informações extras
A linha
var args = Array.prototype.slice.call(arguments);
cria uma matriz doarguments
objeto. Isso é necessário porque os argumentos não são realmente uma matriz .trap()
é um manipulador padrão para qualquer uma das funções da API. Eu passo os argumentos paramessage
que você obtenha um log dos argumentos que foram passados para qualquer chamada de API (não apenasconsole.log
).Editar
Eu adicionei uma matriz extra
console.raw
que captura os argumentos exatamente como passadostrap()
. Eu percebi queargs.join(' ')
estava convertendo objetos para a string"[object Object]"
que às vezes pode ser indesejável. Obrigado bfontaine pela sugestão .fonte
trap
funçãovar args = Array.prototype.slice.call(arguments); var message = args.join(' ');
:? Por que você passa os argumentos através disso para a mensagem?Vale ressaltar que
console.log
no IE8 não é uma verdadeira função Javascript. Não suporta os métodosapply
oucall
.fonte
console.log=Function.prototype.bind.call(console.log,console);
para contornar isso.bind
.Supondo que você não se preocupe com um substituto para alertar, aqui está uma maneira ainda mais concisa de solucionar as deficiências do Internet Explorer:
fonte
Eu realmente gosto da abordagem postada por "orange80". É elegante porque você pode configurá-lo uma vez e esquecê-lo.
As outras abordagens exigem que você faça algo diferente (sempre chame algo diferente do normal
console.log()
), o que está apenas pedindo problemas ... Eu sei que acabaria esquecendo.Eu dei um passo adiante, envolvendo o código em uma função de utilitário que você pode chamar uma vez no início do seu javascript, em qualquer lugar, desde que esteja antes de qualquer log. (Estou instalando isso no produto roteador de dados de eventos da minha empresa. Isso ajudará a simplificar o design entre navegadores de sua nova interface de administração.)
fonte
/**/console.log("...");
para facilitar a pesquisa e a localização do código temporário.Se você ficar "indefinido" em todas as chamadas do console.log, isso provavelmente significa que você ainda tem um firebuglite antigo carregado (firebug.js). Ele substituirá todas as funções válidas do console.log do IE8, mesmo que elas existam. Foi o que aconteceu comigo de qualquer maneira.
Verifique se há outro código substituindo o objeto do console.
fonte
A melhor solução para qualquer navegador sem console é:
fonte
Existem tantas respostas. Minha solução para isso foi:
Em resumo, se console.log não existir (ou, nesse caso, não estiver aberto), armazene o log em um espaço de nomes global Array. Dessa forma, você não será incomodado com milhões de alertas e ainda poderá visualizar seus logs com o console do desenvolvedor aberto ou fechado.
fonte
fonte
window.console.log()
pode estar disponível no IE8 mesmo quandoconsole.log()
não estiver?typeof window.console.log === "object"
, não"function"
Aqui está o meu "IE, por favor, não bata"
fonte
Encontrei isso no github :
fonte
Estou usando a abordagem de Walter de cima (consulte: https://stackoverflow.com/a/14246240/3076102 )
Eu misturo uma solução que encontrei aqui https://stackoverflow.com/a/7967670 para mostrar corretamente os objetos.
Isso significa que a função de interceptação se torna:
Espero que isto seja útil:-)
fonte
Funciona no IE8. Abra as Ferramentas de desenvolvedor do IE8 pressionando F12.
fonte
Eu gosto deste método (usando o documento do jquery pronto) ... ele permite que você use o console, mesmo no ie ... só é necessário recarregar a página se você abrir as ferramentas de desenvolvimento do ie, após o carregamento da página ...
poderia ser mais lento, contabilizando todas as funções, mas eu só uso log, então é isso que faço.
fonte
Aqui está uma versão que fará logon no console quando as ferramentas do desenvolvedor estiverem abertas e não quando estiverem fechadas.
fonte
apply
método.Crie seu próprio console em html .... ;-) Isso pode ser melhorado, mas você pode começar com:
fonte