2009-05-27 25 views

risposta

14

Se si lascia console.log() chiama nel codice di produzione, quindi le persone che visitano il sito utilizzando Internet Explorer avrà errori JavaScript. Se queste persone hanno configurato strumenti di debug aggiuntivi, visualizzeranno finestre di dialogo o popup sgradevoli.

Una rapida ricerca ha rivelato questa discussione discutere i metodi per rilevare se esiste la console di Firebug: http://www.nabble.com/Re:-detect-firebug-existance-td19610337.html

2

Ho avuto molti mal di testa causati da questo.

Uso molto console.log() e fino a poco tempo fa ho scoperto che avrebbe causato l'errore dell'intero codice JS nelle versioni di FF che non utilizzavano firebug.

Di solito eseguo una ricerca prima di andare in diretta e commentando.

D

14

stato morso da prima. Idealmente tutte le istruzioni di console.log devono essere rimosse prima della produzione, ma questo è soggetto a errori e gli sviluppatori invariabilmente dimenticano o eseguono test solo in FF + Firebug.

Una possibile soluzione consiste nel creare un oggetto console fittizio se non ne è già stato definito uno.

if(typeof window.console == 'undefined'){ 
    window.console = { 
     log:function(){} 
    }; 
} 

Una parola di cautela: Ha usato essere il caso per Safari su 10.4 che qualsiasi chiamata a console.log sarebbe un'eccezione di sicurezza come l'oggetto console è un oggetto riservato utilizzato nei widget Dashboard di Mac OS. Non sono sicuro che questo sia il caso, controllerà stasera.

+0

Le ultime versioni di Safari 10,5 effettivamente utilizzare l'API console.log() nei loro strumenti di web dev, quindi questo potrebbe non essere un problema se stai supportando le versioni recenti. – ajm

+0

Va bene, capito non lasceranno che rotta per troppo tempo –

8

Personalmente ho modificato il mio compressore qualche tempo fa per rimuovere i riferimenti della console di pre-compressione. Dopo pochi minuti aggiungendo un'espressione regolare si risparmia una vita di seccature.

+0

Proprio in generale questo è pericoloso, in quanto questo tratta il codice come testo * * invece di codice e quindi 'var a = console; a.log ("test"); 'genererà comunque un errore. Ovviamente è improbabile che venga fatto un simile riferimento, ma poiché esistono soluzioni migliori (vedi sopra), questo sembra essere poco saggio da fare. –

3

Pensavo solo di aggiungere un consiglio davvero buono per ogni debugging di js .... usa la parola chiave "debugger", e è come un punto di interruzione nel codice, Firebug lo rileva anche MSIE (se hai lo studio visivo) rileva e come dico è un punto di interruzione.

Non molte persone sembrano sapere di questo, ma ho trovato invaluble ... anche se c'è neanche un debugger installato sulla macchina che esegue il codice, non succede nulla e il codice passa attraverso bene. Anche se non consiglierei di lasciarli lì dentro.

2

Alcuni compressori eliminano qualsiasi riga preceduta da ;;; (che è una sequenza legale da avere, essendo tre istruzioni vuote.) In questo modo non sei strettamente limitato ai riferimenti della console (cioè potresti fare alcuni calcoli e quindi console.log() il risultato alla fine, e il compressore può spogliarli tutti fuori.) Per questo uso il JavaScript::Minifier.

1

Io uso questo in OOP Javascript, rendendo il mio wrapper per registro che controlla che Firebug esiste:

myclass.prototype.log = function() 
{ 
    if(typeof window.console != 'undefined') 
    { 
     console.log.apply(null, arguments); 
    } 
} 

Basta chiamare:

this.log(arg1, arg2, ...) 
0

Solo un promemoria che IE Dev strumento non supporta apply() su console.log.

Chiamando console.log.apply() si genera un'eccezione in IE8 quando lo strumento dev è attivo.

Problemi correlati