web-dev-qa-db-fra.com

js remplace console.log si non défini

Quelle solution recommandez-vous, la seconde est plus simple (moins de code), mais son utilisation présente des inconvénients?

First: (Définir un indicateur de débogage global)

// the first line of code
var debug = true;
try {
    console.log
} catch(e) {
    if(e) {
        debug=false;
    }
};
// Then later in the code
if(debug) {
    console.log(something);
}

Deuxièmement: override console.log

try {
    console.log
} catch(e) {
    if (e) {
        console.log = function() {}
    }
};
// And all you need to do in the code is
console.log(something);
26
Radu Maris

Ni l'une ni l'autre, mais une variation de la seconde. Perdez le try...catch et vérifiez l'existence de l'objet console correctement:

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

console.log("whatever");
55
Andy E

Ou, en coffeescript:

window.console ?=
    log:-> #patch so console.log() never causes error even in IE.
6
Jameson Quinn

EDIT: La réponse de Andy est bien plus élégante que le rapide bidouillage que j'ai posté ci-dessous.

J'utilise généralement cette approche ...

// prevent console errors on browsers without firebug
if (!window.console) {
    window.console = {};
    window.console.log = function(){};
}
3
Frankie

J'ai déjà rencontré un bogue similaire dans mon passé et je l'ai surmonté avec le code ci-dessous:

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

Je suis tombé sur ce post, qui est similaire aux autres réponses:

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

0
David

Ce qui suit réalisera ce que vous recherchez:

window.console && console.log('foo');
0
Mike Kormendy
window.console = window.console || {};
window.console.log = window.console.log || function() {};
0
Sean