2009-05-27 12 views

Respuesta

14

Si deja console.log() llama en su código de producción, entonces las personas que visitan el sitio con Internet Explorer tendrá errores de JavaScript. Si esas personas tienen herramientas de depuración adicionales configuradas, verán cuadros de diálogo desagradables o ventanas emergentes.

Una búsqueda rápida reveló esta línea de discusión sobre los métodos para detectar si existe la consola de Firebug: http://www.nabble.com/Re:-detect-firebug-existance-td19610337.html

2

He tenido muchos dolores de cabeza causados ​​por esto.

Uso console.log() mucho, y hasta hace poco, descubrí que causaría que todo el código JS fallara en las versiones de FF que no usaban Firebug.

Por lo general, ejecuto un descubrimiento antes de publicarlo y comentarlo.

D

14

sido mordidos por esto antes. Idealmente, todas las instrucciones de console.log deben eliminarse antes de la producción, pero esto es propenso a errores y los desarrolladores invariablemente olvidan o solo prueban en FF + Firebug.

Una posible solución es crear un objeto de consola ficticio si aún no está definido uno.

if(typeof window.console == 'undefined'){ 
    window.console = { 
     log:function(){} 
    }; 
} 

Una palabra de precaución: Solía ​​ser el caso de Safari en 10.4 que cualquier llamada a CONSOLE.LOG lanzaría una excepción de seguridad como el objeto de la consola es un objeto reservado utilizado en los widgets del Dashboard de Mac OS. No estoy seguro de que este sea el caso más, lo comprobaré esta noche.

+0

Las últimas versiones de Safari 10,5 realmente utilizan la API console.log() en sus herramientas web dev, así que esto puede no será un problema si está apoyando versiones recientes. – ajm

+0

Lo suficiente, supongo que no lo dejarán roto demasiado tiempo –

8

Personalmente modifiqué mi compresor hace un tiempo para quitar las referencias de la consola precomprimir. Unos minutos añadiendo una expresión regular allí ahorra toda una vida de problemas.

+0

En general, esto es peligroso, ya que trata el código como * texto * en lugar de código y por lo tanto 'var a = consola; a.log (" prueba "); 'todavía arrojará un error. Por supuesto, es poco probable que se haga tal referencia, pero como existen mejores soluciones (ver arriba) esto parece imprudente. –

3

Acabo de pensar que agregaría un consejo muy bueno para cualquier depuración de js .... use la palabra clave "depurador", y es como un punto de interrupción en el código, firebug detecta que también MSIE (si tiene Visual Studio) detecta y como digo es un punto de inflexión.

No parece que muchas personas lo sepan, pero lo he encontrado invalorable ... también si no hay un depurador instalado en la máquina que ejecuta el código, no pasa nada y el código funciona bien. Aunque no aconsejaría dejarlos allí.

2

Algunos compresores eliminarán cualquier línea con el prefijo ;;; (que es una secuencia legal que debe tener, siendo tres declaraciones vacías.) De esta manera no está estrictamente limitado a las referencias de la consola (es decir, podría hacer algunos cálculos y luego console.log() el resultado al final, y el compresor puede quítelos a todos.) Utilizo JavaScript::Minifier para esto.

1

Yo uso esta en programación orientada a objetos Javascript, haciendo mi propio envoltorio de registro que comprueba que existe Firebug:

myclass.prototype.log = function() 
{ 
    if(typeof window.console != 'undefined') 
    { 
     console.log.apply(null, arguments); 
    } 
} 

Sólo tiene que llamar:

this.log(arg1, arg2, ...) 
0

Sólo un recordatorio de que Dev Tool IE no soporta apply() en console.log.

Llamar a console.log.apply() aumentará la excepción en IE8 cuando la herramienta dev está activa.

Cuestiones relacionadas