In Internet Explorer 9 (und 8) wird die console -Objekt wird nur verfügbar gemacht, wenn die Entwicklertools für eine bestimmte Registerkarte geöffnet werden. Wenn Sie das Entwicklertools-Fenster für diese Registerkarte ausblenden, wird die console -Objekt bleibt für jede Seite sichtbar, zu der Sie navigieren. Wenn Sie eine neue Registerkarte öffnen, müssen Sie auch die Entwicklertools für diese Registerkarte öffnen, damit die console Objekt, das freigelegt werden soll.
Die console Objekt ist kein Teil eines Standards und ist eine Erweiterung des Document Object Model. Wie andere DOM-Objekte wird es als Host-Objekt betrachtet und muss nicht erben Objectnoch seine Methoden aus Function, wie es native ECMAScript-Funktionen und -Objekte tun. Das ist der Grund apply und call sind bei diesen Methoden undefiniert. In IE 9 wurden die meisten DOM-Objekte verbessert, um von nativen ECMAScript-Typen zu erben. Da die Entwicklertools als Erweiterung des IE gelten (wenn auch als integrierte Erweiterung), haben sie eindeutig nicht die gleichen Verbesserungen wie der Rest des DOM erhalten.
Für das, was es wert ist, können Sie immer noch etwas verwenden Function.prototype Methoden an console Methoden mit ein wenig bind() Magie:
Ich kann ohne Stolz sagen, dass ich in den vielen Jahren, in denen ich für das Web entwickelt habe, davon ausgegangen bin, dass console.log von allen gängigen Browsern unterstützt wird. Ich habe gerade einen Tag damit verbracht, herauszufinden, warum IE9 mein Skript nicht mag, und jetzt weiß ich warum – es hatte im allerersten Schritt eine console.log. Unmöglich zu debuggen, da dieser Fehler durch Aktivieren des Debug-Modus sofort verschwunden ist: P Danke für die Klarstellung !!
– f055
16. Juli 2012 um 22:00 Uhr
Hatte gestern das gleiche Problem. Installieren DebugBar hat mir zufällig schneller geholfen, da es das Konsolenobjekt nicht definiert. Als ich also die IE-Konsole versteckte, aber nicht die DebugBar, bekam ich von letzterer eine Meldung, dass es einen JavaScript-Fehler gab (Konsole ist nicht definiert).
– Simon A. Eugster
28. September 2012 um 5:21 Uhr
Sie sollten das Fehlerprotokoll überprüft haben, als das Problem zum ersten Mal auf IE @f055 aufgetreten ist
– Glücklicher Ali
17. Januar 2014 um 5:21 Uhr
Internetoptionen -> Erweitert -> Benachrichtigung über jeden Skriptfehler anzeigen. Webentwickler sollten dies im IE immer aktiviert lassen. Dies hätte Sie darüber informiert, dass die Konsole oder die Protokollfunktion nicht definiert ist … kann mich nicht genau an die Nachricht erinnern.
– Seth-Blumen
7. Februar 2014 um 19:20 Uhr
Eine einfache Lösung für dieses console.log-Problem besteht darin, Folgendes am Anfang Ihres JS-Codes zu definieren:
if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };
Das funktioniert bei mir in allen Browsern. Dadurch wird eine Dummy-Funktion für console.log erstellt, wenn der Debugger nicht aktiv ist. Wenn der Debugger aktiv ist, wird die Methode console.log definiert und normal ausgeführt.
Weitere Informationen und robusterer Konsolenersatz (einschließlich anderer Konsolenmethoden) hier: stackoverflow.com/questions/8002116/…
Ich weiß, dass dies eine sehr alte Frage ist, aber ich bin der Meinung, dass dies eine wertvolle Alternative zum Umgang mit dem Konsolenproblem darstellt. Platzieren Sie den folgenden Code vor jedem Aufruf von console.* (also Ihrem allerersten Skript).
// Avoid `console` errors in browsers that lack a console.
(function() {
var method;
var noop = function () {};
var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeStamp', 'trace', 'warn'
];
var length = methods.length;
var console = (window.console = window.console || {});
while (length--) {
method = methods[length];
// Only stub undefined methods.
if (!console[method]) {
console[method] = noop;
}
}
}());
console.log wird nur definiert, wenn die Konsole geöffnet ist. Wenn Sie in Ihrem Code danach suchen möchten, stellen Sie sicher, dass Sie in der Fenstereigenschaft danach suchen
if (window.console)
console.log(msg)
Dies löst eine Ausnahme in IE9 aus und funktioniert nicht richtig. Mach das nicht
if (console)
console.log(msg)
Nachdem ich den Artikel aus dem obigen Kommentar von Marc Cliament gelesen habe, habe ich jetzt meine browserübergreifende Allzweck-console.log-Funktion so geändert, dass sie wie folgt aussieht:
Nur Function.prototype.apply.call(console.log, console, arguments);
– Viktor
29. Oktober 2013 um 9:52 Uhr
@Victor es sollte definitiv die einzige akzeptierte Antwort sein!
– Pavel Frankov
11. März 2015 um 12:41 Uhr
Paolo Mioni
Ich möchte erwähnen, dass IE9 den Fehler nicht auslöst, wenn Sie console.log mit geschlossenen Entwicklertools auf allen Windows-Versionen verwenden. Unter XP funktioniert es, aber unter Windows 7 nicht. Wenn Sie also die Unterstützung für WinXP im Allgemeinen eingestellt haben, können Sie die Datei console.log direkt verwenden.
Nur Function.prototype.apply.call(console.log, console, arguments);
– Viktor
29. Oktober 2013 um 9:52 Uhr
@Victor es sollte definitiv die einzige akzeptierte Antwort sein!
Schauen Sie sich diesen großartigen Beitrag über die Feinheiten von IE8-9-Konsolenobjekten/-funktionen an: whattheheadsaid.com/2011/04/…
– Marc Clement
30. Dezember 2011 um 13:37 Uhr
Siehe auch „Konsole“ ist ein undefinierter Fehler für den Internet Explorer
– Bergi
10. November 2012 um 12:34 Uhr
@MarcCliment der Link ist tot
– chakeda
27. April 2018 um 15:53 Uhr
@chakeda Ich hasse es, wenn das passiert, da ist der Link aus dem Webarchiv: web.archive.org/web/20140625085155/http://whattheheadsaid.com/…
– Marc Clement
29. April 2018 um 21:25 Uhr