2010-01-14 10 views
6

Ich benutze Firebug console.log() zum Debuggen meiner Website. Wenn ich versuche, meine Website in Browsern ohne Firebug anzuzeigen, dann bekomme ich eine Konsole ist nicht definiert Fehler. Gibt es eine Möglichkeit, diesen Fehler elegant zu vermeiden?ignorieren Firebug Konsole, wenn nicht installiert

Ich fand this potential solution, aber es scheint ein bisschen umständlich. Und Ideen?

Antwort

17

Firebug Quellcode enthält eine Datei, dies zu tun:

Siehe firebugx.js

Sie das Rad nicht jeden Tag neu zu erfinden :)

+0

Dies ist eigentlich eine wirklich gute Lösung, vor allem, wenn Sie die anderen Funktionen wie "warnen" und "Fehler" verwenden. –

+3

Link fehlgeschlagen für mich. Ich denke, das ist das gleiche: http://code.google.com/p/fbug/source/browse/branches/firebug1.5/lite/firebugx.js –

+0

Dank Matthew, ich habe den Link selbst wenn behoben Es ist nicht die letzte Version der Datei (die ich nirgendwo im svn-Repository von Firebug finden kann) – OcuS

2

Ich glaube nicht, dass es viel besser als die Problemumgehung, die Sie verknüpfen, ist. Es ist natürlich möglich, es zu schmelzen, um nur console.log() zu definieren und Ruhe zu lassen, aber im Wesentlichen werden Sie ein Konstrukt wie dieses nicht umgehen.

Die einzige Alternative, die Ihnen in den Sinn kommt, ist, jedes Mal, wenn Sie es anrufen, nach console.log zu suchen, und das ist noch mühsamer.

3

Die verknüpfte Lösung ist im Grunde eine Variante (mit ein paar zusätzlichen Funktionen) dafür:

EDIT Der Code unten nicht wirklich funktionieren, wenn Firefox vorhanden ist. Das wird lehren, für Code veröffentlichen, ohne nur die Überprüfung meiner nicht ganz so 1337 Operator || skillz zu zeigen:

window.console = window.console || {}; 
console.log = function(){}; 

Der Grund dafür ist, dass Firefox-Konsole ist eigentlich ein Getter nur property Off-Fenster. Daher können wir es nicht festlegen. Stattdessen muss so etwas wie diese verwendet werden:

if (!window.console) { 
    window.console = {}; 
    window.console.log = function(){}; 
} 

Auch console.log (und console.warn, console.error) auf Webkit-Browsern, einschließlich dem mobilen Safari, ziemlich cool, nicht wahr?

+0

erstellen, die auch die "Konsole ist nicht definiert" -Fehler erzeugt – hoju

+0

Natürlich tut es, danke. Ich werde den Code bearbeiten. –

-1

Aus der Spitze von meinem Kopf:

if(!console) 
{ 
    console = {}; 
    console.log = function() { }; 
} 
+1

, die auch die "Konsole ist nicht definiert" Fehler – hoju

2

Ehrlich gesagt, würde ich diese verwenden. Es deckt nicht nur console.log() ab, sondern auch jede andere console Methode und in einer anständig kurzen Anzahl von Zeilen. Die Tatsache, dass es zum ersten Mal im Yahoo Media Player verwendet wurde, scheint darauf hinzudeuten, dass es auch hervorragend browserübergreifend funktioniert.

Das bisschen Code ist Ihre beste Wette, ist eigentlich anständig elegant, und sollte in jedem Fall funktionieren. Solange Sie oberhalb des Snippets kommentieren, was es ist (um zukünftige Entwickler nicht zu verwirren), sollten Sie in Ordnung sein.

0

Meine letzte Lösung:

if(!("console" in window)) 
    window.console = {log: function() {}}; 
1

Die Lösung von @OcuS ist sicher das Beste, aber Sie können es mit mir verbessern: C hack auf diese Weise Log auf FF Console: Log to Firefox Error Console from JavaScript

Dann zum Firebugx hinzufügen.js diese 3 Zeilen innerhalb IF:

window.console['error'] = li 
window.console['warn'] = li 
window.console['debug'] = li 

So werden Sie das Protokoll von jeder Konsole sehen Fehler, warnen und debug selbst wenn die Firebug

4

geschlossen ist ich meine Cross- immer schaffen Browser Wrapper für console.log ähnliche Funktionen und es sieht so aus:

function log(a){ 
try{ 
    console.log(a); 
    }catch(er){ 
    try{ 
    window.opera.postError(a); 
    }catch(er){ 
    //no console avaliable. put 
    //alert(a) here or write to a document node or just ignore 
    } 
    } 

} 

Es kann für jeden Browser erweitert werden. in IE, wenn im Debug würde ich dieses jQuery-Code in den letzten Fang empfiehlt sich,:

$('body').append('<pre>'+JSON.serialize(a)+'</pre>'); 

Sie müssen JSON.serialize auf Ihr Skript hinzuzufügen. IE hat es nicht (IE8 haben könnte, ich bin mir nicht sicher)

1

Sie diesen Code verwenden können, um zu überprüfen, ob Konsolen-Objekt

if('console' in window && 'log' in window.console) 
{ 
    // code using console.log here 
} 

Oder diesen Code

if(typeof window.console != 'undefined' 
&& typeof window.console.log != 'undefined') 
{ 
    // code using console.log here 
} 

Auch existiert Sie können diesen Beitrag lesen http://alexandershapovalov.com/firebug-console-is-not-defined-60/ Innerhalb der Post-Verknüpfung, wie jQuery-Wrapper für Konsole

Verwandte Themen