2011-02-09 23 views
41

Me preguntaba, ¿cómo puedo averiguar con javascript si el objeto de la consola está disponible?averiguar si la consola está disponible

tengo el problema de que si me olvido de eliminar un resultado de depuración como console.log('sthg') obtengo errores en varios navegadores, si no hay firebug, o similar, activo.

gracias por la ayuda

próximos a ese problema estoy interesado en toda la información sobre el objeto de la consola. alguien tiene algún enlace de documentación, o eso? ¿es un estándar? y así sucesivamente ...

Respuesta

60

comprobar la propiedad existe como miembro de window:

if (window.console) { 
} 

junto a ese problema que me interesa toda la información sobre el objeto de la consola. alguien tiene algún enlace de documentación, o eso? ¿es un estándar? y así sucesivamente ...

Compruebe el Firebug documentation for the Console API; Chrome y Safari implementan la mayoría de los métodos allí enumerados, pero no todos. No hay un estándar que defina lo que debe estar en la consola, por lo que deberá probar cada navegador para ver si es compatible con la función.

+0

¿qué hay de los cromos y la consola de IEs? :-) – helle

+0

@helle: Como dije, Chrome implementa la mayoría de los métodos API de Firebug Console. IE implementa algunos de los básicos, como 'warn',' error', 'info', etc. pero no los implementa todos y no parece haber una lista documentada, así que tendrás que probarlos para tú mismo. –

+0

@AndyE ¿podría explicarnos por qué comprobar que la propiedad existe en la ventana no es tan robusta como usar typeof? ¿Por qué no deberíamos verificar directamente la variable windows.console o incluso solo la consola global como en las otras respuestas? – matpop

-4

tal vez ...

if (console) { 
    // do stuff 
} 
+6

Esto arrojaría un error en los navegadores donde 'console' no está definido. –

+0

sí ... he intentado esto :-) – helle

5

Definido por firebug, IE8 (necesidad de abrir las herramientas de desarrollo con F12), Chrome, etc, pero no hay ninguna especificación definida por él. Hay un console.log wrapper que lo convierte en una solución de registro de navegador cruzada muy fácil de usar, por lo que si la consola no existe, su código no explotará.

+0

¡Eso es lo que estaba buscando para recomendar pero no podía pensar en el nombre! Es bueno saber que alguien más lo encontró. –

+0

¿qué hay de los cromos y la consola de IEs? :-) – helle

+0

@helle Sí, supongo que IE8 agregó una consola ahora y no pensaba en Chrome. Gracias. –

30

Una manera sencilla y corta agradable de dar salida a la consola de seguridad es el siguiente:

window.console && console.log('Debug message'); 
+0

+1 por simplicidad: D – Tieme

+0

No creo que esto sea muy bueno porque alguien puede haber sobrescrito la consola y .log no existe. También debe verificar si .log existe y de hecho es una función. – mambo

2

siempre incluyo esto en la parte superior de mi HTML de cabecera antes me carga ninguna otra cosa. La depuración con console.debug es demasiado larga para mí. Y me gusta alternar el uso de estas funciones de consola.

No sé qué tan optimizado es el código, pero siempre hace el trabajo.

(function() { 
    var consoleDisabled = false; 
    if (consoleDisabled) { 
     window.console = undefined; 
    } 
    if (window.console == undefined) { 
     window.console = { 
      debug: function() { 
       return true; 
      }, 
      info: function() { 
       return false; 
      }, 
      warn: function() { 
       return false; 
      }, 
      log: function() { 
       return false; 
      } 
     } 
    } 
    debug = (function(args) { 
     window.console.debug(args); 
    }); 
    info = (function(args) { 
     window.console.info(args); 
    }); 
    warn = (function(args) { 
     window.console.warn(args); 
    }); 
    log = (function(args) { 
     window.console.log(args); 
    }); 
})(); 
debug(somevar); 
info(somevar); 
warn(somevar); 
log(somevar); 
4
try{ 
console.log("test") 
} 
catch(e){ 
console={}, 
console.log=function(a){} 
} 

sólo hay que poner en la parte superior de su archivo JS y luego usar console.log(); sin ninguna preocupación por el error del navegador, también tuve este error en IE9

+0

Solución interesante. Normalmente no me gusta usar excepciones para manejar el flujo, pero esto podría ser muy útil. – Hal

7

esto es lo que uso. tenga en cuenta que solo estoy apoyando a medias los navegadores sin soporte para la consola. y yo sólo utilizo console.log(), pero se puede ver cómo puede ser extendida para soportar console.dir(), console.info(), etc

var console = console || { 
    "log": function(stuff) {} 
}; 

me gusta porque llamar no lo hace causa un error, pero devuelve [indefinido], que creo que es apropiado.

en cuenta que muchas muchas personas antes (y después) nos han escrito polyfills similares:

https://gist.github.com/search?q=console+%7C%7C+console

+0

+1 porque creo que es una buena idea. La respuesta de Andy E hace exactamente lo que se le preguntó, por lo que todavía tiene la respuesta correcta. – helle

+0

de acuerdo. esto es más de un lado que una respuesta directa. me complace que te guste –

+0

Puede valer la pena decir que funciona porque la directiva _var_ en realidad se procesa ** antes ** de la ejecución del código. – matpop

2

manera más simple sería:

if (window.console){ 
    console.log('do something'); 
} 

en lugar de escribir:

console.log('do something'); 
Cuestiones relacionadas