2011-02-10 3 views
11

Ho il seguente:Perché Firefox 3 rottura con console.log

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

Questo sta rompendo in Firefox 3, il che significa quando FF colpisce quella linea nella JS, si va oltre. Stranamente se ho Firebug aperto non si rompe e continua normalmente. Alcuni come Firebug previene questo problema?

Sono confuso su questo. Qualche idea sul perché console.log romperebbe firefox 3, ma non se firebug è aperto?

Grazie

+0

non fa parte console.log di Firebug? e quindi se non è aperto, non c'è nessun contenitore da incollare per ... –

risposta

30

Questo non è solo Firefox. Il tuo codice smetterà di funzionare in tutti i browser (tranne Chrome e Safari (in alcuni casi) perché hanno console.log() integrato con i loro strumenti di sviluppo.)

È perché quando non hai firebug aperto , l'oggetto "console" non è definito. Dovresti fare attenzione a non lasciare mai le funzioni di console.log() nel tuo codice, o si romperà in ogni browser.


vorrei aggiungere che a volte ho usato questa funzione:

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

Poi si può semplicemente chiamare:

log(somevar, anothervar); 

e funzionerà allo stesso modo di console .log, ma non fallirà se firebug non è caricato (ed è più corto per digitare: P)

Cheers

+0

wow non ne avevo idea! – AnApprentice

+1

Puoi usare 'console.log()', controlla solo se 'window.console' esiste prima di chiamare qualsiasi funzione della console. Per esempio. 'if (window.console) console.log ('Hello World');' – Michal

+1

safari ha anche console.log – generalhenry

1

Eseguo sempre un controllo if (console) per verificare che la console esista effettivamente. Se firebug non è aperto è come se agissi su un oggetto nullo, quindi perché si rompe.

+0

Un [oggetto nullo] (http://en.wikipedia.org/wiki/Null_object) silenziosamente inghiottirà la registrazione, che funzionerebbe bene ... – delnan

+1

@delnan: Penso che cosa significhi "bobber" è che "console" ha il valore "null" (che non è vero, è "non definito"). Ma in entrambi i casi il codice si romperà. –

+0

Ah si. Significato indefinito! : D – bobber205

1

Firefox non ha un oggetto console. Firebug ne aggiunge uno.

La semplice soluzione è di avere firebug aperto per lo sviluppo e rimuovere le istruzioni di console.log per la distribuzione.

si può anche fare una funzione di log personalizzato come

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

che registrerà solo se esiste console

+0

il problema con questa funzione è che non accetterà più argomenti e parametri allo stesso modo di console.log() e anche se (console) non è davvero un buon controllo per se un oggetto è definito o meno in javascript . – arnorhs

+0

il codice snipit non era pensato per essere funzionale, ma solo per farsi un'idea. Pubblicheremmo un esempio reale ma mi hai battuto anche io: p – generalhenry

2

in Firefox se la console non è aperto quando si chiama per un errore JavaScript è gettato .

Ho avvolto tutto il mio console.log in un wrapper per verificare la presenza di console - è possibile avvolgere il controllo attorno alla chiamata della console o utilizzare un nome diverso per la console 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'); 

Verificare la console

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

Nel caso, che Firebug è chiuso, ho sovrascrivere l'oggetto della console. Quindi, puoi implementare le funzioni di fallback ...

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 .. ] */ }; 

Saluti,

Dyvor

0

Per mantenere Firefox 3.0 da lamentarsi affidabile utilizzare la seguente ...

if ('console' in window) {}