2011-02-10 18 views
11

Tengo el siguiente:¿Por qué es Firefox 3 ruptura con console.log

console.log (a.time_ago() + ' ' + b.time_ago()); 

Esto se está rompiendo en Firefox 3, es decir, cuando FF golpea esa línea en la JS, que no va más allá. Extrañamente, si tengo Firebug abierto, no se rompe y continúa de forma normal. ¿De qué manera Firebug previene este problema?

Estoy confundido en este caso. ¿Alguna idea de por qué console.log rompería Firefox 3, pero no si Firebug está abierto?

Gracias

+0

No es parte de console.log Firebug? y por lo tanto, si no está abierto, no hay ningún contenedor para pegar en ... –

Respuesta

30

Esto no es solo Firefox. Su código dejará de funcionar en todos los navegadores (excepto Chrome y safari (en algunos casos) porque tienen console.log() incorporado junto con sus herramientas de desarrollador).

Es porque cuando no tiene firebug abierto , el objeto "consola" no está definido. Debe tener cuidado de no dejar nunca las funciones de console.log() en su código, o se romperá en cada navegador.


me gustaría añadir que a veces he utilizado esta función:

function log() { 
    if (typeof console == 'undefined') { 
     return; 
    } 
    console.log.apply(console, arguments); 
} 

A continuación, puede llamar a:

log(somevar, anothervar); 

y funcionará del mismo modo que la consola .log, pero no fallará si Firebug no está cargado (y es más corto para escribir: P)

Cheers

+0

wow ¡No tenía ni idea! – AnApprentice

+1

Puede usar 'console.log()', simplemente verifique si 'window.console' existe antes de llamar a cualquier función de la consola. P.ej. 'if (window.console) console.log ('Hello World');' – Michal

+1

safari también tiene console.log – generalhenry

1

Siempre hago una comprobación if (console) para asegurarme de que la consola realmente existe. Si firebug no está abierto, es como si estuviera actuando sobre un objeto nulo, por lo que se rompe.

+0

Un [objeto nulo] (http://en.wikipedia.org/wiki/Null_object) tragaría silenciosamente el registro, lo que funcionaría bien ... – delnan

+1

@delnan: Creo que lo que significa bobber es que 'console' tiene el valor' null' (que no es verdadero, es 'undefined'). Pero en ambos casos, el código se romperá. –

+0

Ah sí. Significó indefinido! : D – bobber205

1

Firefox no tiene un objeto de consola. Firebug agrega uno.

La solución simple es tener Firebug abierto para el desarrollo y eliminar las instrucciones console.log para el despliegue.

también se puede hacer una función de registro personalizado como

function log (msg) 
{ 
    if(console) 
    { 
    console.log(msg); 
    } 
} 

que registrará sólo si existe la consola

+0

el problema con esta función es que no aceptará múltiples argumentos y parámetros de la misma manera que lo hace console.log() y también si (consola) no es realmente una buena verificación para si un objeto está definido o no en javascript . – arnorhs

+0

el código snipit no fue pensado para ser funcional, solo para transmitir la idea. Publicaría un ejemplo real pero tú también me lo ganaste: p – generalhenry

2

en Firefox si la consola no está abierto cuando se llama a que se emite un error de JavaScript .

Envuelvo todos mis console.log's en un contenedor para verificar la consola: puede ajustar el control alrededor de la llamada de la consola o usar un nombre diferente para la consola de alias.

Aliasing

/* konsole is a safe wrapper for the Firebug console. */ 
var konsole = { 
    log: function(args){}, 
    dir: function(args){}, 
    debug: function(args){}, 
    info: function(args){}, 
    warn: function(args){}, 
    error: function(args){} 
}; 
// Remove below here when in production 
if (typeof window.console != 'undefined' && typeof window.console.log == 'function') { 
    konsole = window.console; 
} 
konsole.log('testing debugging'); 
konsole.error('throw an error message to the console'); 

Comprobar para la consola

if (typeof window.console != 'undefined' && typeof window.console.log == 'function') { 
    console.log('testing debugging'); 
    console.error('throw an error message to the console'); 
} 
4

En el caso, que Firebug está cerrado, me sobrescribir el objeto de la consola. Entonces, puedes implementar funciones de repliegue ...

console = console || { log : function() { 
// place your logging code here, if firebug is closed 
}, debug : function() { 
// place your debug code here, if firebug is closed 
} /*, [ and so on .. ] */ }; 

Saludos,

Dyvor

0

Para mantener Firefox 3.0 de quejarse fiable usa la siguiente ...

if ('console' in window) {} 
Cuestiones relacionadas