28 Stimmen

Js Überschreiben console.log, wenn nicht definiert

Welche Lösung empfehlen Sie, die zweite ist einfacher (weniger Code), aber es gibt Nachteile bei der Verwendung?

Erste: (Setzen einer globalen Debug-Flagge)

// die erste Codezeile
var debug = true;
try {
    console.log
} catch(e) {
    if(e) {
        debug=false;
    }
};
// Dann später im Code
if(debug) {
    console.log(something);
}

Zweite: überschreiben console.log

try {
    console.log
} catch(e) {
    if (e) {
        console.log = function() {}
    }
};
// Und alles was Sie im Code tun müssen ist
console.log(something);

56voto

Andy E Punkte 324972

Nichts davon, sondern eine Variation des zweiten. Entfernen Sie das try... catch und überprüfen Sie das Vorhandensein des Konsolenobjekts ordnungsgemäß:

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

console.log("was auch immer");

1 Stimmen

Vermutlich möchten Sie entweder this.console = ... oder var console = ... machen? Wie Sie es im Moment haben, würden Sie einen Fehler im ECMAScript 5 Strict Mode erhalten.

1 Stimmen

@Tim: Danke, es war ein Versehen. Ich denke window.console wäre am besten für die Portabilität.

1 Stimmen

Portabilität im Sinne der Möglichkeit, diesen Code in eine Funktion zu verschieben, anstatt der Portabilität zwischen Umgebungen?

6voto

Jameson Quinn Punkte 1030

Oder in Coffeescript:

window.console ?=
    log:-> #Patch, damit console.log() niemals einen Fehler verursacht, selbst in IE.

3voto

Frankie Punkte 23889

BEARBEITEN: Andys Antwort ist viel eleganter als der schnelle Hack, den ich unten veröffentlicht habe.

Ich verwende im Allgemeinen diesen Ansatz...

// verhindern von Konsolenfehlern auf Browsern ohne Firebug
if (!window.console) {
    window.console = {};
    window.console.log = function(){};
}

1 Stimmen

Ich mag deine Version, Frankie, aber ich bin mir nicht sicher, ob sie sicher in allen Browsern funktioniert. Ich erinnere mich, dass ich das benutzt habe und immer noch gelegentliche Probleme mit einer der IE-Versionen hatte, vielleicht weil das Konsole-Objekt nur definiert ist, wenn das Konsolenfenster in IE9 geöffnet ist. Ich glaube, ich musste eine "undefined"-Überprüfung wie Andy E vorgeschlagen hat machen.

0 Stimmen

@Simon, dies kommt spät als Kommentar, aber ich habe es erst heute gesehen. Andys Lösung ist viel eleganter als dieser schnelle Hack, den ich gepostet habe. Du solltest das stattdessen verwenden.

1voto

Suresh Punkte 702

Ich habe in der Vergangenheit einen ähnlichen Bug erlebt und ihn mit dem folgenden Code überwunden:

if(!window.console) {
    var console = {
        log : function(){},
        warn : function(){},
        error : function(){},
        time : function(){},
        timeEnd : function(){}
    }
}

0 Stimmen

Wie unterscheidet sich das von den Antworten von Frankie oder Andy_E?

0 Stimmen

Die Antwort von Suresh ist besser, da er auch andere Methoden definiert, die zusammen mit log nicht definiert werden. Überprüfen Sie developer.mozilla.org/en-US/docs/Web/API/Console für eine vollständige Liste aller Funktionen, die möglicherweise (oder möglicherweise nicht) definiert sind.

0 Stimmen

Dies funktioniert nicht, wenn es innerhalb einer Funktion aufgerufen wird. Anstelle von var console sollte es window.console oder einfach nur console sein.

0voto

David Punkte 2894

Ich bin auf diesen Beitrag gestoßen, der ähnlich zu den anderen Antworten ist:

http://jennyandlih.com/resolved-logging-firebug-console-breaks-ie

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X