2011-10-25 4 views
12

Sto provando ad usare console.log per mettere un po 'di logging nel lato javascript del mio programma. Ho notato, tuttavia, che a meno che la console di sviluppo non sia aperta in IE, JS in pratica smette di funzionare quando raggiunge console.log. Questo è un dolore ... significa che devo rimuovere tutto il logging ogni volta che voglio fare una build di produzione.C'è un modo per accedere alla console senza interrompere il codice in IE?

A parte l'ovvio:

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

c'è un buon modo per accedere javascript che è amichevole a tutti i principali browser?

EDIT:

Ebbene, dopo aver guardato il palo duplicato (oops) oltre a considerare le risposte qui, ho lato devo con solo controllando l'esistenza di console prima di chiamare. Anche se sono dispiaciuto di avere il markup extra, preferirei non calpestare i futuri programmatori che potrebbero voler usare Firebug Lite per eseguire il debug del mio codice.

+0

possibile duplicato del [test per le dichiarazioni console.log in IE] (http://stackoverflow.com/questions/7585351/testing-for-console-log-statements-in-ie) – zzzzBov

+0

possibile duplicato di ['console' è un errore indefinito per internet explorer] (http://stackoverflow.com/questions/3326650/console-is-undefined-error -per-internet-explorer) – skolima

risposta

9

IE ha la propria console, e voi non vuole ignorare console se si sta utilizzando firebug lite. Basta fare in modo che console esiste quando registro viene chiamato:

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

Meglio ancora, utilizzare && di scelta rapida:

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

Cosa intendi con "IE ha la sua console?" La console che fornisce funziona felicemente con console.log SE la console di sviluppo è aperta. Gli altri browser sono in grado di accedere alla loro console anche se non è esplicitamente aperto. Solo curioso, non dicendo che la tua risposta sia errata. Hai sicuramente punti validi che sto considerando. :) –

+0

Sono passato a 'window.console && console.log() 'e ora tutto funziona in IE! – Avishai

+0

Solo un heads-up, è per lo più una cattiva idea lasciare che 'console.log' si infiltra nel tuo codice di produzione. –

15

È possibile creare un falso console:

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

Non mi piace particolarmente questa idea poiché sovrascrivere le console aggiunte dopo il caricamento della pagina come [Firebug lite] (http://getfirebug.com/firebuglite). – zzzzBov

+0

Onestamente ho combattuto molto con Firebug Lite e ho finito per rimuoverlo. Ho scoperto che la console di sviluppo di Chrome era abbastanza per me per capire le cose - e Firebug lite avrebbe risolto i problemi probabilmente una volta al giorno e dovevano essere chiusi. Solo le mie esperienze, però. –

+1

@Sean Anderson, ' 'lo aggiungerà solo per IE. – zzzzBov

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

sto usando fauxconsole; Ho modificato il css un po 'in modo che appaia più bello ma funzioni molto bene.

1

Io uso questo io stesso frammento

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

Ho risolto utilizzando la "console falso" di cui sopra, per evitare la rottura esecuzione dello script. E 'incluso solo per InternetExplorer < 10. ho includere questo nella mia testa html:

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