2011-10-25 13 views
12

Estoy tratando de usar console.log para poner algo de registro en el lado de JavaScript de mi programa. Sin embargo, me di cuenta de que, a menos que la consola de desarrollo esté abierta en IE, JS básicamente deja de funcionar cuando llega a console.log. Esto es un dolor ... significa que tengo que eliminar todo el registro cada vez que quiero hacer una compilación de producción.¿Hay alguna forma de iniciar sesión en la consola sin romper el código en IE?

Aparte de lo obvio:

function DoSafeConsoleLog(parameters) 
{ 
    if (!$.browser.msie) 
    { 
     console.log(parameters); 
    } 
} 

hay una buena manera de iniciar la sesión javascript que es amigable con todos los navegadores?

EDIT:

Bueno, después de ver el mensaje duplicado (perdón), así como teniendo en cuenta las respuestas aquí, he conseguido lado con sólo la comprobación de la existencia de la consola antes de llamar. A pesar de que detestaba tener el marcado adicional, preferiría no ponerme en pie de futuros programadores que quieran usar Firebug Lite para depurar mi código.

+0

posible duplicado de [Pruebas de declaraciones console.log en IE] (http://stackoverflow.com/questions/7585351/testing-for-console-log-statements-in-ie) – zzzzBov

+0

posible duplicado de ['console' es un error indefinido para Internet Explorer] (http://stackoverflow.com/questions/3326650/console-is-undefined-error -for-internet-explorer) – skolima

Respuesta

9

IE tiene su propia consola, y usted no quiere anular la consola si está usando firebug lite. Sólo asegúrese de que existe registro de consola cuando se llama a:

if (window.console) console.log('foo bar baz', fizz, buzz); 

Mejor aún, utilice && de acceso directo:

window.console && console.log('foo bar baz', fizz, buzz); 
+1

¿Qué quiere decir con "IE tiene su propia consola?" La consola que proporciona funciona felizmente con console.log SI la consola de desarrollador está abierta. Los otros navegadores pueden iniciar sesión en su consola incluso si no está abierta explícitamente. Solo curiosidad, no decir que tu respuesta es incorrecta en absoluto. Definitivamente tienes puntos válidos que estoy considerando. :) –

+0

Cambié a 'window.console && console.log() '¡y ahora todo funciona en IE! – Avishai

+0

Solo un aviso, es una mala idea dejar que 'console.log's se filtre en su código de producción. –

15

Se puede crear una falsa console:

if (typeof console === "undefined") 
    console = { log: function() { } }; 
+0

No me gusta especialmente esta idea, ya que anularía las consolas agregadas después de la carga de la página, como [Firebug lite] (http://getfirebug.com/firebuglite). – zzzzBov

+0

Honestamente luché con firebug lite mucho y terminé eliminándolo. Descubrí que la consola de desarrollo de Chrome era suficiente para que descubriera las cosas, y Firebug lite podía fallar probablemente una vez al día y debía cerrarse. Solo mis experiencias, sin embargo. –

+1

@Sean Anderson, ' 'lo agregará solo para IE. – zzzzBov

0
function log(log){ 
    try{ 
    console.log(log); 
    }catch(err){} 
} 
0

estoy usando fauxconsole; Modifiqué el CSS un poco para que se vea mejor pero funciona muy bien.

1

utilizo este fragmento mismo

if (! ('console' in window)) { 
var names = ['log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml', 'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd']; 
window.console = {}; 
for (var i = 0; i < names.length; ++i) window.console[names[i]] = function() {}; 
}else { 
/*if it exists but doesn't contain all the same methods....silly ie*/ 
var names = ['log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml', 'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd']; 
for (var i = 0; i < names.length; ++i) if(!window.console[names[i]])window.console[names[i]] = function() {}; 
}; 
0

Lo resuelto mediante el uso de la "consola falso" descrito anteriormente, para evitar la ruptura de ejecución del script. Se incluye sólo para InternetExplorer < 10. que incluyen esto en mi cabeza html:

<!--[if lte IE 10]> 
    <script> if (typeof console === "undefined") console = { log: function() { } }; </script> 
<![endif]--> 
Cuestiones relacionadas