2011-05-17 10 views
28

Estoy escribiendo un complemento. Para eso voy a registrar algunas cosas, como advertencias, cosas necc, etc. Para registrarlas, usaré la consola, pero puede haber un error si algún navegador no admite la consola. Para manejar este error, estoy pensando en usar este código:Compruebe si la consola está presente

if (typeof console == 'undefined') console = {}; 
if (typeof console.log == 'undefined') console.log = function() {}; 
if (typeof console.debug == 'undefined') console.debug = function() {}; 
if (typeof console.info == 'undefined') console.info = function() {}; 
if (typeof console.warn == 'undefined') console.warn = function() {}; 
if (typeof console.error == 'undefined') console.error = function() {}; 

Funcionará bien o hay una mejor opción?

Respuesta

34

Te estás acercando bien. sin embargo, puede acortarlo un poco:

if(typeof console === "undefined") { 
    console = { 
     log: function() { }, 
     debug: function() { }, 
     ... 
    }; 
} 

Esto le permite utilizar console.log/console.debug etc sin comprobar primero si se ha definido un objeto de la consola. Te recomiendo que siempre incluyas este fragmento si estás iniciando sesión, ya que es fácil olvidarte de eliminarlo y romperá tu sitio si no hay una consola presente.

2
console && console.log("whatever"); 

¿Esto no funciona?

+0

Creo que puedes hacer 'console.log (" whatever ") || verdadero; 'o algo similar. Lo vi hace un par de meses y no recuerdo exactamente cómo lo había hecho el desarrollador, pero creo que es correcto. – Endophage

+0

@Endophage Si la consola no es compatible, obtendrá un "No se puede llamar al método 'log' de indefinido", una verificación correcta en línea sería: 'console && console.log && console.log (" whatever ")' – Lior

9

Este enfoque hace que sea más fácil añadir/cambiar/eliminar métodos en el futuro y es más elegante y menos redundante que la mayoría ofrecen:

if (!"console" in window || typeof console == "undefined") { 
    var methods = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; 
    var emptyFn = function() {}; 
    window.console = {}; 
    for (var i = 0; i < methods.length; ++i) { 
     window.console[methods[i]] = emptyFn; 
    } 
} 
0

¿Qué tal @alexn acortamiento 's respuesta un poco

window.console = window.console || { debug: function(){}, log: function() { } }; 
Cuestiones relacionadas