2010-12-01 3 views
17

Ich habe dies Ersatz für console.log in document.ready() definiert:Was ist die korrekte Art, in die Skriptkonsole (console.log) in IE zu schreiben?

$(document).ready(function(){ 
    console.log("doc ready"); 
    if(typeof console === "undefined"){ 
    console = { log: function() { } }; 
    } 
} 

Ich dachte IE diese Funktion zur Verfügung haben, sollte aber, wenn ich den Anruf über

console.log("doc ready"); 

die Ausgabe erscheint im Firefox enthalten Konsole, aber nicht im IE - tatsächlich bricht die Ausführung des IE-Skripts an dieser Stelle vollständig ab.

Was ist der richtige Weg, um auf die Konsole in IE zu schreiben?

Antwort

0

Konsole ist für Firebug.

Sie müssen firebug lite installieren, um Schreiben zu ermöglichen, in IE zu trösten.

+0

Konsole funktioniert auch in Chrome – darioo

+1

Falsch, Sie müssen Firebug Lite für die Konsole in IE7 und unter installieren. IE8 hat eine Konsole, die mit keiner der Protokollierungsmethoden wie Firebug so robust ist, aber sie ist da. – epascarello

13

Das Script-Ausführung bricht wegen der falschen Reihenfolge der Befehle, kann dies besser sein:

$(document).ready(function(){ 

    if(typeof console === "undefined"){ 
    console = { log: function() { } }; 
    } 
    console.log("doc ready"); 
} 

Wenn Sie die Konsole ersten Zugriff, bevor geprüft wird, ob es vorhanden ist (und es, wenn nicht zu schaffen), hält diese Ergebnisse in einen Fehler.

6

IE6/7 hat standardmäßig keine Konsole.

In der Tat auch nicht Firefox - es wird von einem Plug-in namens Firebug bereitgestellt; Wenn Sie eine Firefox-Kopie verwenden, ohne dass Firebug installiert ist, erhalten Sie Fehler, die versuchen, console genauso aufzurufen wie mit IE.

IE8/9 tun haben eine Konsole.

Chrome und Safari haben ein integriertes Konsolenobjekt, aber zählen Sie nicht darauf, dass es genauso funktioniert wie Firebug oder IE8.

Beachten Sie, dass das Konsolenobjekt in allen Browsern möglicherweise nur erstellt wird, wenn das Debugfenster geöffnet ist. Dies bedeutet, dass Ihr Code mit einem console.log Aufruf in beliebigen Browser, nicht nur IE fehlschlagen kann.

In Ihrem Beispiel erstellen Sie im Wesentlichen ein Dummy-Objekt console, wenn es nicht existiert, was eindeutig verhindern soll, dass Browser ohne Konsole abstürzen, wenn Sie console.log() aufrufen. Aber du rufst console.log() an, bevor dieser Code ausgeführt wird, also werden jene Browser ohne Konsole in dieser Zeile abstürzen. Sie sollten deshalb Ihre console.log("doc ready"); Zeile nach unten verschieben, damit sie nach dem Bit kommt, das erkennt, ob console existiert.

Wenn die Konsole für IE existieren soll, gibt es eine Firebug-Version Firebug Lite, die in jedem Browser ausgeführt werden kann. Wenn Sie das ausführen, wird das Objekt console erstellt.

Beachten Sie jedoch, dass es nur ausgeführt werden kann, nachdem die Seite geladen wurde, so dass Sie es niemals dazu bringen können, Konsolenmeldungen in der Dokumentbereitschaftsfunktion anzuzeigen. Darüber hinaus kann das Konsolenobjekt möglicherweise nicht erstellt werden, wenn es bereits vorhanden ist. Daher kann der Code, den Sie im Dokument zum Erstellen eines Dummy-Konsolenobjekts bereit haben, möglicherweise verhindern, dass Firebug Lite ordnungsgemäß funktioniert.

Schließlich, während der Verwendung der Konsole ist fantastisch für Debugging-Zwecke, stellen Sie sicher, dass Sie nie Live-Code mit Aufrufen an console.log, auch wenn Sie planen, sie nur zu Debugging-Zwecken später verwenden. Wie Sie bereits gesehen haben, können sie dazu führen, dass ein Browser den Code nicht mehr ausführt, wenn er kein Konsolenobjekt hat, und es wird viele Live-Benutzer geben, die ihn nicht haben. Behalten Sie also Acht, Probleme für Live-Benutzer zu verursachen : Am besten ist es, sicherzustellen, dass Sie alle Anrufe an die Konsole vor dem Versand des Codes entfernt haben.

+1

In gewisser Weise falsch, da IE eine Konsole in IE8 + ohne Plug-in/extra Js-Code hat. – epascarello

+0

@epascarello - fair genug, obwohl es für das ursprüngliche Plakat versagt. (Er hat jedoch nicht angegeben, welche Version von IE er verwendet hat). [Edited meine Antwort, um es genauer zu machen] – Spudley

+0

Upvote für die Erwähnung, niemals Live-Code mit console.log zu versenden. –

2

Hier ist, was ich für Failover auf Firebug Lite verwenden, wenn keine Konsole verfügbar ist. Dies garantiert, dass Sie eine Konsole mit einer Beschreibung erhalten, obwohl sie alle etwas anders arbeiten, also seien Sie vorsichtig.

Verwandte Themen