2010-12-01 11 views
17

tengo este sustituto de console.log definido en document.ready():¿Cuál es la forma correcta de escribir en la consola de script (console.log) en IE?

$(document).ready(function(){ 
    console.log("doc ready"); 
    if(typeof console === "undefined"){ 
    console = { log: function() { } }; 
    } 
} 

pensé IE se suponía que tienen esta función disponible todavía, pero cuando se incluyo la llamada anterior

console.log("doc ready"); 

la salida aparece en el Firefox consola, pero no en IE; de hecho, la ejecución del script de IE se rompe completamente en este punto.

¿Cuál es la forma correcta de escribir en la consola en IE?

Respuesta

0

console is for firebug.

Usted tendrá que instalar firebug lite para permitir la escritura a la consola en el IE.

+0

la consola también funciona en Chrome – darioo

+1

Incorrecto, tiene que instalar firebug lite para la consola en IE7 y versiones anteriores. IE8 tiene una consola, no tan robusta con todos los métodos de registro como Firebug, pero está ahí. – epascarello

13

Se rompe la secuencia de comandos de ejecución debido a un orden incorrecto de las instrucciones, esto puede ser mejor:

$(document).ready(function(){ 

    if(typeof console === "undefined"){ 
    console = { log: function() { } }; 
    } 
    console.log("doc ready"); 
} 

Si accede por primera vez la consola antes de comprobar si existe (y crearlo si no), estos resultados en un error

6

IE6/7 no tiene una consola por defecto.

De hecho, tampoco lo hace Firefox: lo proporciona un complemento llamado Firebug; si usa una copia de Firefox sin Firebug instalado, entonces obtendrá errores al intentar llamar al console de la misma manera que con IE.

IE8/9 haga tenga una consola.

Chrome y Safari tienen un objeto de consola incorporado, pero no cuentan con que funcione exactamente de la misma manera que Firebug o IE8.

Tenga en cuenta que en todos los navegadores, el objeto de la consola no se puede crear a menos que la ventana de depuración esté abierta. Esto significa que su código con una llamada console.log podría fallar en cualquier navegador, no solo IE.

En su ejemplo, básicamente está creando un objeto console ficticio si no existe, que está claramente destinado a evitar que los navegadores sin una consola se bloqueen si llama al console.log(). Pero está llamando al console.log() antes de que se ejecute ese código, por lo que los navegadores sin una consola se bloquean en esa línea. Por lo tanto, debe mover su línea console.log("doc ready"); para que aparezca después del bit que detecta si existe console.

Si desea que la consola exista para IE, hay una versión de Firebug llamada Firebug Lite, que se puede ejecutar en cualquier navegador. Si ejecuta esto, creará el objeto console.

Sin embargo, tenga en cuenta que solo se puede ejecutar después de cargar la página, por lo que nunca podrá mostrar los mensajes de la consola en la función de documento listo. Además, puede fallar la creación del objeto de la consola si ya existe, por lo que el código que tiene en el documento listo para crear un objeto de consola ficticio puede evitar que Firebug Lite funcione correctamente.

Por último, si bien utilizar la consola es fantástico para la depuración, asegúrese de que nunca envíe código en vivo con llamadas al console.log, incluso si planea usarlas solo para depuración más adelante. Como ya has visto, pueden hacer que un navegador deje de ejecutar el código si no tiene un objeto de consola, y habrá muchos usuarios activos que no lo tienen, así que ten cuidado de no causar problemas a los usuarios en vivo. : lo mejor es asegurarse siempre de haber eliminado todas sus llamadas a la consola antes de enviar su código.

+1

Mal en cierto modo ya que IE tiene una consola en IE8 + sin un código js de complemento/extra. – epascarello

+0

@epascarello - bastante justo, aunque está fallando para el cartel original. (Aunque no especificó qué versión de IE estaba usando). [Edité mi respuesta para hacerlo más específico] – Spudley

+0

Voto a favor de la mención de nunca enviar código en vivo con console.log. –

2

Esto es lo que uso para conmutar por error a firebug lite si no hay una consola disponible. Esto garantiza que obtendrás una consola de alguna descripción, aunque todas funcionan de forma ligeramente diferente, así que ten cuidado.

function attachConsole(force) { 
    if(force || typeof console === "undefined"){ 
    var head= document.getElementsByTagName('head')[0]; 
    var script= document.createElement('script'); 
    script.type= 'text/javascript'; 
    script.src= 'http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'; 
    head.appendChild(script); 
    return true; 
    } 
return false; 
} 
Cuestiones relacionadas