Ich benutze Firebug und habe einige Aussagen wie:
console.log("...");
auf meiner Seite. In IE8 (wahrscheinlich auch in früheren Versionen) erhalte ich Skriptfehler, die besagen, dass "Konsole" undefiniert ist. Ich habe versucht, dies oben auf meiner Seite zu platzieren:
<script type="text/javascript">
if (!console) console = {log: function() {}};
</script>
trotzdem bekomme ich die fehler. Gibt es eine Möglichkeit, die Fehler zu beseitigen?
typeof
in Ihrem if, um undefinierte Fehler zu vermeiden:if(typeof console === "undefined") { var console = { log: function (logMsg) { } }; }
Antworten:
Versuchen
Eine undefinierte Variable kann nicht direkt referenziert werden. Alle globalen Variablen sind jedoch Attribute mit demselben Namen wie der globale Kontext (
window
im Fall von Browsern), und der Zugriff auf ein undefiniertes Attribut ist in Ordnung.Oder verwenden
if (typeof console === 'undefined') console = ...
Sie, wenn Sie die magische Variable vermeiden möchtenwindow
, lesen Sie die Antwort von @Tim Down .quelle
<script type="text/javascript"> if (!window.console) console = {log: function() {}}; </script>
oben auf Ihrer Seite , um allen anderen, die dies verwenden, klar zu sein ! Danke Kenny.var console = console || { log: function() {} };
window
var console = window.console || { log: function() {} };
Fügen Sie Folgendes oben in Ihr JavaScript ein (bevor Sie die Konsole verwenden):
Der Wrapper zum Schließen von Funktionen dient dazu, die Variablen so zu definieren, dass keine Variablen definiert werden. Dies schützt sowohl vor undefinierten
console
als auch vor undefiniertenconsole.debug
(und anderen fehlenden Methoden).BEARBEITEN: Ich habe festgestellt, dass HTML5 Boilerplate in seiner Datei js / plugins.js ähnlichen Code verwendet, wenn Sie nach einer Lösung suchen, die (wahrscheinlich) auf dem neuesten Stand gehalten wird.
quelle
Eine andere Alternative ist der
typeof
Betreiber:Eine weitere Alternative ist die Verwendung einer Protokollierungsbibliothek, z. B. meines eigenen log4javascript .
quelle
var
? Das würde die Dinge hier nur verwirren. Oder meinst duwindow.console
eher zuweisen alsconsole
?var
. Warum sollte es die Dinge hier verwirren?typeof
gibt garantiert einen String zurück und"undefined"
ist ein String. Wenn die beiden Operanden vom gleichen Typ sind==
und===
angegeben werden, um genau die gleichen Schritte auszuführen. Die Verwendungtypeof x == "undefined"
ist eine absolut solide Methode, um zu testen, obx
in einem Bereich und einer ECMAScript 3-kompatiblen Umgebung undefiniert ist.Verwenden Sie für eine robustere Lösung diesen Code (aus dem Quellcode von Twitter):
quelle
In meinen Skripten verwende ich entweder die Kurzform:
oder wenn es nicht möglich oder machbar ist, jede console.log-Zeile zu bearbeiten, erstelle ich eine gefälschte Konsole:
quelle
if(!console) {console = {} ; console.log = function(){};}
!window.console && (window.console = { log: function () { } });
Sie können verwenden,
console.log()
wenn SieDeveloper Tools
in IE8 geöffnet haben, und Sie können auch dasConsole
Textfeld auf der Registerkarte Skript verwenden.quelle
quelle
this
Bezug genommen wirdwindow
.Basierend auf zwei vorherigen Antworten von
und die Dokumentationen für
Hier ist eine Best-Effort-Implementierung für das Problem. Wenn also ein console.log vorhanden ist, füllt es die Lücken für nicht vorhandene Methoden über console.log.
Zum Beispiel können Sie für IE6 / 7 die Protokollierung durch Warnung ersetzen (dumm, funktioniert aber) und dann das folgende Monster einfügen (ich habe es console.js genannt): [Sie können Kommentare nach Belieben entfernen, ich habe sie als Referenz hinterlassen. ein Minimierer kann sie angehen]:
und console.js:
quelle
methods.hasOwnProperty(method) &&
in der for-Schleife brauchen .> x = { a: 1, b: 2}
->Object {a: 1, b: 2}
undfor(var f in x) {console.log(f + " " + x[f]);} 'end'
->a 1 b 2 "end"
. Ein erstelltes anonymes Objekt hat also keine zusätzliche Eigenschaft undmethods
wird nur vor derfor
Schleife erstellt. Ist es möglich, das oben genannte zu hacken?var x = { a: 1, b: 2}; Object.prototype.surprise = 'I\'m in yer objectz'; for (var f in x) {console.log(f, x[f]);}
Sie wissen nie, was eine Bibliothek mit den Objekten in der Vererbungskette des Objekts gemacht hat, mit dem Sie arbeiten. Daher die Empfehlung von Javascript-Code-Qualitätswerkzeugen wie jshint und jslint zu verwendenhasOwnProperty
.Wenn in IE9 die Konsole nicht geöffnet ist, lautet dieser Code:
zeigt "Objekt", aber diesen Code
löst eine TypeError-Ausnahme aus, gibt jedoch keinen undefinierten Wert zurück;
Die garantierte Version des Codes sieht also ungefähr so aus:
quelle
Ich verwende nur console.log in meinem Code. Also habe ich einen sehr kurzen 2 Liner dabei
quelle
Es wurde festgestellt, dass OP Firebug mit IE verwendet. Nehmen Sie also an, es handelt sich um Firebug Lite . Dies ist eine unkonventionelle Situation, da die Konsole im IE definiert wird, wenn das Debugger-Fenster geöffnet wird. Was passiert jedoch, wenn Firebug bereits ausgeführt wird? Ich bin mir nicht sicher, aber vielleicht ist die Methode "firebugx.js" ein guter Weg, um in dieser Situation zu testen:
Quelle:
https://code.google.com/p/fbug/source/browse/branches/firebug1.2/lite/firebugx.js?r=187
(aktualisierte Links 12/2014)
quelle
Ich benutze Fauxconsole ; Ich habe das CSS ein wenig modifiziert, damit es besser aussieht, aber sehr gut funktioniert.
quelle
Überprüfen Sie zum Debuggen im IE dieses log4javascript
quelle
Für IE8- oder Konsolenunterstützung, die auf console.log beschränkt ist (kein Debug, Trace, ...), können Sie Folgendes tun:
Wenn console ODER console.log undefiniert ist: Erstellen Sie Dummy-Funktionen für Konsolenfunktionen (Trace, Debug, Log, ...)
window.console = { debug : function() {}, ...};
Andernfalls, wenn console.log definiert ist (IE8) UND console.debug (irgendein anderes) nicht definiert ist: Leiten Sie alle Protokollierungsfunktionen zu console.log um, damit diese Protokolle beibehalten werden können!
window.console = { debug : window.console.log, ...};
Ich bin mir nicht sicher, ob Assert in verschiedenen IE-Versionen unterstützt wird, aber Vorschläge sind willkommen. Diese Antwort wurde auch hier veröffentlicht: Wie kann ich die Konsolenprotokollierung in Internet Explorer verwenden?
quelle
quelle
Konsolenstummel in TypeScript:
quelle
Sie können das Folgende verwenden, um einen zusätzlichen Versicherungsgrad zu erhalten, bei dem alle Grundlagen abgedeckt sind. Die Verwendung von
typeof
first vermeidetundefined
Fehler. Durch===
die Verwendung wird auch sichergestellt, dass der Name des Typs tatsächlich die Zeichenfolge "undefiniert" ist. Schließlich möchten Sie der Funktionssignatur einen Parameter hinzufügen (ich habe ihnlogMsg
willkürlich ausgewählt), um die Konsistenz zu gewährleisten, da Sie alles, was Sie drucken möchten, an die Konsole an die Protokollfunktion übergeben. Auf diese Weise bleiben Sie auch intelligent und vermeiden Warnungen / Fehler in Ihrer JS-fähigen IDE.quelle
Manchmal funktioniert die Konsole in IE8 / 9, aber zu anderen Zeiten schlägt sie fehl. Dieses fehlerhafte Verhalten hängt davon ab, ob Sie Entwicklertools geöffnet haben, und wird in der Frage zum Stapelüberlauf beschrieben. Unterstützt IE9 console.log und ist es eine echte Funktion?
quelle
Es ist ein ähnliches Problem beim Ausführen von console.log in untergeordneten Fenstern in IE9 aufgetreten, das von der Funktion window.open erstellt wurde.
Es scheint, dass in diesem Fall die Konsole nur im übergeordneten Fenster definiert und in untergeordneten Fenstern undefiniert ist, bis Sie sie aktualisieren. Gleiches gilt für Kinder von Kinderfenstern.
Ich behebe dieses Problem, indem ich das Protokoll in die nächste Funktion einbinde (unten ist ein Fragment des Moduls).
quelle
Nachdem ich so viele Probleme mit dieser Sache hatte (es ist schwierig, den Fehler zu debuggen, da der Fehler beim Öffnen der Entwicklerkonsole nicht mehr auftritt!), Entschied ich mich, einen Overkill-Code zu erstellen, um mich nie wieder damit beschäftigen zu müssen:
Persönlich verwende ich immer nur console.log und console.error, aber dieser Code behandelt alle anderen Funktionen, wie im Mozzila Developer Network gezeigt: https://developer.mozilla.org/en-US/docs/Web/API/console . Setzen Sie diesen Code einfach oben auf Ihre Seite und Sie sind für immer damit fertig.
quelle
Sie können console.log (...) direkt in Firefox verwenden, jedoch nicht in IEs. In IEs müssen Sie window.console verwenden.
quelle