Unterstützt IE9 console.log und ist es eine echte Funktion?

Lesezeit: 5 Minuten

Unterstutzt IE9 consolelog und ist es eine echte Funktion
mloughran

Unter welchen Umständen ist window.console.log in Internet Explorer 9 definiert?

Sogar wenn window.console.log ist definiert, window.console.log.apply und window.console.log.call sind undefiniert. Warum ist das?

[Related question for IE8: What happened to console.log in IE8?.]

  • 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


Unterstutzt IE9 consolelog und ist es eine echte Funktion
Andi E

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:

var log = Function.prototype.bind.call(console.log, console);
log.apply(console, ["this", "is", "a", "test"]);
//-> "thisisatest"

  • Dasselbe gilt für Firebugs console Objekt.

    – Marcel Korpel

    29. März 2011 um 13:36 Uhr

  • 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/…

    – Zach Lysobey

    13. Juni 2013 um 19:15 Uhr

  • @ZachL: Welche genau in Beton?

    – hakre

    11. August 2015 um 8:41 Uhr

  • Meine Antwort hat einen Ansatz: stackoverflow.com/a/15771110/363701. Überprüfen Sie auch dies: github.com/paulmillr/console-polyfill/blob/master/index.js

    – Zach Lysobey

    11. August 2015 um 14:09 Uhr

Unterstutzt IE9 consolelog und ist es eine echte Funktion
Steven Anderson

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;
        }
    }
}());

Referenz:
https://github.com/h5bp/html5-boilerplate/blob/v5.0.0/dist/js/plugins.js

1646319917 922 Unterstutzt IE9 consolelog und ist es eine echte Funktion
John

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:

function log()
{
    "use strict";

    if (typeof(console) !== "undefined" && console.log !== undefined)
    {
        try
        {
            console.log.apply(console, arguments);
        }
        catch (e)
        {
            var log = Function.prototype.bind.call(console.log, console);
            log.apply(console, arguments);
        }
    }
}

  • 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

1646319918 177 Unterstutzt IE9 consolelog und ist es eine echte Funktion
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!

    – Pavel Frankov

    11. März 2015 um 12:41 Uhr

1646319919 64 Unterstutzt IE9 consolelog und ist es eine echte Funktion
Deckenfisch

Wie wäre es mit…

console = { log : function(text) { alert(text); } }

  • Dies kann in einigen Fällen eine passable Problemumgehung sein, aber Sie haben die Frage nicht wirklich angesprochen.

    – pswg

    19. Januar 2015 um 21:49 Uhr

924600cookie-checkUnterstützt IE9 console.log und ist es eine echte Funktion?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy