Laut diesem Beitrag war es in der Beta, aber es ist nicht in der Veröffentlichung?
javascript
logging
internet-explorer-8
console
leeand00
quelle
quelle
console.log
ist in IE8 vorhanden, aber dasconsole
Objekt wird erst erstellt, wenn Sie DevTools öffnen. Daher kann ein Aufruf von zuconsole.log
einem Fehler führen, z. B. wenn er beim Laden der Seite auftritt, bevor Sie die Entwickler-Tools öffnen können. Die gewinnende Antwort hier erklärt es ausführlicher.Antworten:
Noch besser für den Fallback ist dies:
quelle
console.log ist erst verfügbar, nachdem Sie die Entwicklertools geöffnet haben (F12, um sie zu öffnen und zu schließen). Das Lustige ist, dass Sie es nach dem Öffnen schließen und dann über console.log-Aufrufe veröffentlichen können. Diese werden angezeigt, wenn Sie es erneut öffnen. Ich denke, das ist eine Art Fehler und kann behoben werden, aber wir werden sehen.
Ich werde wahrscheinlich nur so etwas verwenden:
und noch einfacher:
quelle
alert
ist böse Einige Codes verhalten sich anders, wenn Warnungen verwendet werden, da das Dokument den Fokus verliert, wodurch es noch schwieriger wird, Fehler zu diagnostizieren oder solche zu erstellen, bei denen es vorher keine gab. Wenn Sie versehentlich einconsole.log
in Ihrem Produktionscode belassen, ist es harmlos (vorausgesetzt, es explodiert nicht) - es wird nur stillschweigend an der Konsole protokolliert. Wenn Sie versehentlich einenalert
in Ihrem Produktionscode belassen, wird die Benutzererfahrung ruiniert.Dies ist meine Sicht auf die verschiedenen Antworten. Ich wollte die protokollierten Nachrichten tatsächlich sehen, auch wenn die IE-Konsole beim Auslösen nicht geöffnet war, und schiebe sie in ein von
console.messages
mir erstelltes Array. Ich habe auch eine Funktion hinzugefügtconsole.dump()
, um das Anzeigen des gesamten Protokolls zu erleichtern.console.clear()
wird die Nachrichtenwarteschlange leeren.Diese Lösung "behandelt" auch die anderen Konsolenmethoden (von denen ich glaube, dass sie alle von der Firebug-Konsolen-API stammen ).
Schließlich liegt diese Lösung in Form eines IIFE vor , sodass der globale Geltungsbereich nicht verschmutzt wird. Das Fallback-Funktionsargument wird am Ende des Codes definiert.
Ich lege es einfach in meine Master-JS-Datei, die auf jeder Seite enthalten ist, und vergesse es.
Einige zusätzliche Informationen
Die Linie
var args = Array.prototype.slice.call(arguments);
erstellt ein Array aus demarguments
Objekt. Dies ist erforderlich, da Argumente nicht wirklich ein Array sind .trap()
ist ein Standardhandler für eine der API-Funktionen. Ich übergebe die Argumente an,message
damit Sie ein Protokoll der Argumente erhalten, die an einen API-Aufruf übergeben wurden (nicht nurconsole.log
).Bearbeiten
Ich habe ein zusätzliches Array hinzugefügt
console.raw
, das die Argumente genau so erfasst, wie sie übergeben wurdentrap()
. Mir wurde klar, dassargs.join(' ')
Objekte in die Zeichenfolge konvertiert wurden,"[object Object]"
was manchmal unerwünscht sein kann. Danke bfontaine für den Vorschlag .quelle
trap
Funktionslinien dienen :var args = Array.prototype.slice.call(arguments); var message = args.join(' ');
? Warum geben Sie die Argumente hierdurch an die Nachricht weiter?Es ist erwähnenswert, dass
console.log
in IE8 keine echte Javascript-Funktion ist. Die Methodenapply
odercall
werden nicht unterstützt .quelle
console.log=Function.prototype.bind.call(console.log,console);
um dies zu umgehen.bind
.Angenommen, Sie interessieren sich nicht für einen Fallback zur Warnung, dann finden Sie hier eine noch präzisere Möglichkeit, die Mängel des Internet Explorers zu umgehen:
quelle
Ich mag den Ansatz von "orange80" sehr. Es ist elegant, weil Sie es einmal einstellen und vergessen können.
Bei den anderen Ansätzen müssen Sie etwas anderes tun (etwas anderes als einfach nennen
console.log()
jedes Mal ), was nur nach Ärger fragt… Ich weiß, dass ich es irgendwann vergessen würde.Ich bin noch einen Schritt weiter gegangen, indem ich den Code in eine Dienstprogrammfunktion eingebunden habe, die Sie am Anfang Ihres Javascript einmal aufrufen können, solange es vor der Protokollierung liegt. (Ich installiere dies in dem Event Data Router-Produkt meines Unternehmens. Es wird dazu beitragen, das browserübergreifende Design der neuen Administrationsoberfläche zu vereinfachen.)
quelle
/**/console.log("...");
damit der temporäre Code leicht gesucht und gefunden werden kann.Wenn Sie für alle Ihre console.log-Aufrufe "undefiniert" erhalten, bedeutet dies wahrscheinlich, dass noch ein alter Firebuglite geladen ist (firebug.js). Es werden alle gültigen Funktionen von IE8s console.log überschrieben, obwohl sie vorhanden sind. Das ist mir sowieso passiert.
Suchen Sie nach anderem Code, der das Konsolenobjekt überschreibt.
quelle
Die beste Lösung für jeden Browser ohne Konsole ist:
quelle
Es gibt so viele Antworten. Meine Lösung dafür war:
Kurz gesagt, wenn console.log nicht vorhanden ist (oder in diesem Fall nicht geöffnet ist), speichern Sie das Protokoll in einem globalen Namespace-Array. Auf diese Weise werden Sie nicht mit Millionen von Warnungen belästigt und können Ihre Protokolle weiterhin bei geöffneter oder geschlossener Entwicklerkonsole anzeigen.
quelle
quelle
window.console.log()
möglicherweise in IE8 verfügbar ist, auch wenn diesconsole.log()
nicht der Fall ist?typeof window.console.log === "object"
nicht"function"
Hier ist mein "IE bitte nicht abstürzen"
quelle
Ich habe das auf Github gefunden :
quelle
Ich verwende Walters Ansatz von oben (siehe: https://stackoverflow.com/a/14246240/3076102 ).
Ich mische eine Lösung ein, die ich hier gefunden habe: https://stackoverflow.com/a/7967670 , um Objekte richtig anzuzeigen.
Dies bedeutet, dass die Trap-Funktion:
Ich hoffe das ist hilfreich :-)
quelle
Es funktioniert in IE8. Öffnen Sie die Entwicklertools von IE8, indem Sie F12 drücken.
quelle
Ich mag diese Methode (mit jquery's doc ready) ... Sie können die Konsole auch in verwenden, dh ... nur der Haken ist, dass Sie die Seite neu laden müssen, wenn Sie die Entwickler-Tools von ie öffnen, nachdem die Seite geladen wurde ...
Es könnte schlanker sein, wenn alle Funktionen berücksichtigt werden, aber ich verwende nur das Protokoll, also mache ich das so.
quelle
Hier ist eine Version, die sich bei der Konsole anmeldet, wenn die Entwicklertools geöffnet sind und nicht, wenn sie geschlossen sind.
quelle
apply
Methode.Machen Sie Ihre eigene Konsole in HTML .... ;-) Dies kann verbessert werden, aber Sie können beginnen mit:
quelle