2009-05-27 9 views

Antwort

14

Wenn Sie console.log() ruft in Ihrem Produktionscode verlassen, besuchen dann die Menschen die Website Internet Explorer verwendet, wird JavaScript-Fehler haben. Wenn diese Personen zusätzliche Debugging-Tools konfiguriert haben, sehen sie böse Dialogfelder oder Popups.

Eine schnelle Suche ergab diesen Thread Methoden diskutieren, um festzustellen, ob die Firebug-Konsole vorhanden ist: bevor sie von diesem gebissen http://www.nabble.com/Re:-detect-firebug-existance-td19610337.html

2

Ich hatte viele Kopfschmerzen, die dadurch verursacht wurden.

Ich benutze console.log() eine Menge, und bis vor kurzem festgestellt, dass es würde den gesamten JS-Code in Versionen von FF fehlschlagen, die nicht mit Firebug.

Ich führe normalerweise einen Fund aus, bevor ich live gehe, und kommentiere ihn aus.

D

14

worden. Im Idealfall müssen alle console.log-Anweisungen vor der Produktion entfernt werden, aber dies ist fehleranfällig und Entwickler vergessen oder testen nur in FF + Firebug.

Eine mögliche Lösung besteht darin, ein Dummy-Konsolenobjekt zu erstellen, falls eines nicht bereits definiert ist.

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

Ein Wort der Vorsicht: Früher ist es der Fall für Safari auf 10.4 sein, dass jeder Anruf eine Sicherheitsausnahme console.log werfen würde als die Konsolen-Objekt ein reserviertes Objekt in dem Mac OS Dashboard-Widgets verwendet wird. Nicht sicher, dass das nicht mehr der Fall ist, werde ich heute Abend überprüfen.

+0

Die neuesten 10.5 Versionen von Safari tatsächlich die console.log verwenden() API in ihre Web-Entwickler-Tools, so kann dies kein Problem, wenn Sie aktuelle Versionen unterstützen. – ajm

+0

Fair genug, dachte, sie werden es nicht zu lange gebrochen lassen –

8

Persönlich habe ich meinen Kompressor vor einiger Zeit modifiziert, um Konsolenreferenzen vor der Komprimierung auszublenden. Ein paar Minuten, in denen ein Regex hinzugefügt wird, sparen ein Leben lang Ärger.

+0

Nur im Allgemeinen ist dies gefährlich, da dies den Code als * text * und nicht als Code behandelt und somit 'var a = console; a.log (" test "); 'wird immer noch einen Fehler werfen. Es ist natürlich unwahrscheinlich, dass ein solcher Verweis erfolgt, aber da bessere Lösungen existieren (siehe oben), scheint dies unklug zu sein. –

3

Nur gedacht, ich würde einen wirklich guten Tipp für jede js Debuggen hinzufügen .... Verwenden Sie das Schlüsselwort "Debugger", und es ist wie ein Haltepunkt im Code, erkennt Firebug es auch MSIE (wenn Sie Visual Studio) erkennt es und wie ich es sage, ist es ein Haltepunkt.

Nicht viele Leute scheinen darüber zu wissen, aber ich habe es unzutreffend gefunden ... auch wenn kein Debugger auf dem Rechner installiert ist, auf dem der Code läuft, passiert nichts und der Code läuft gut. Obwohl ich nicht rate, sie dort zu lassen.

2

Einige Kompressoren streichen jede Zeile mit dem Präfix ;;; (Dies ist eine legale Sequenz zu haben, drei leere Anweisungen zu sein.) Auf diese Weise sind Sie nicht streng auf Konsolenreferenzen beschränkt (dh Sie könnten einige Berechnungen durchführen und dann console.log() das Ergebnis am Ende, und der Kompressor kann Streifen Sie alle aus.) Ich benutze dafür JavaScript::Minifier.

1

Ich benutze dies in OOP Javascript, meine eigenen Wrapper für Protokoll machen, die überprüft, ob firebug existiert:

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

Rufen Sie einfach:

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

Nur eine Erinnerung daran, dass IE Dev-Tool nicht unterstützt apply() auf console.log.

Der Aufruf von console.log.apply() löst in IE8 eine Exception aus, wenn das Dev-Tool aktiv ist.