47 votes

Test de la console.journal des états dans IE

Double Possible:
"console" n'est pas défini d'erreur d'internet explorer

Si vous avez console.log des déclarations dans votre code, Internet Explorer va jeter une erreur JavaScript (au moins dans IE7 qui est ce que notre intranet utilisateurs ont installé).

J'utilise Firefox pour la plupart de mes tests de développement, principalement en raison de la fonctionnalité fournie par Firebug (où j'ai utiliser beaucoup de console consolidés) mais j'ai aussi besoin de tester sous IE.

si j'ajoute ce qui suit à mon JavaScript, l'erreur ne peut pas être lancé.

var debugging = false;
if (typeof console == "undefined") 
    var console = { log: function() {} };  

Le problème est que je voudrais le déclenchement d'un événement si le mode de débogage est faux. Si j'ai créer une fonction pour tester si le débogage est faux et faire une action (à ce point, juste une alerte), mais quand j'ai essayer de faire la suite, je reçois un IE message d'erreur indiquant que la Console n'est pas défini.

var debugging = false; // or true   
if (typeof console == "undefined") 
    var console = { log: function() {consoleMsg()} };   

function consoleMsg() {
    if(!debugging) {
    alert('Console.log event in Production Code');
}   

Si quelqu'un pouvait m'aider à corriger mon code, de fournir une meilleure façon de m'aider à atteindre mon but, ou me diriger vers une ressource à edumacate moi-même, je serais très reconnaissante.

138voto

Joseph Silber Points 69582

Vous n'avez pas à passer par le biais de tous ces cercles. Il suffit de vérifier si la console existe avant de l'utiliser.

Ainsi, au lieu de:

console.log('foo');

Utilisation:

window.console && console.log('foo');

...et vous ne recevez aucun message d'erreur.


Alternativement, vous pouvez simplement rechercher en haut de votre script, et si c'est pas défini, il suffit de le remplir avec une fonction vide:

// At the top of your script:
if ( ! window.console ) console = { log: function(){} };
// If you use other console methods, add them to the object literal above

// Then, anywhere in your script:
console.log('This message will be logged, but will not cause an error in IE7');

Pour une solution plus robuste, utilisez ce morceau de code (pris sur le twitter du code source):

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

5voto

graphicdivine Points 6414

"console", lui-même doit être une fonction, ainsi que les 'log'. Donc:

if(typeof(console) === 'undefined') {
    console = function(){};
    console.log = function(){consoleMsg()};
}   

2voto

Bhesh Gurung Points 24875

Avez-vous essayez try-catch:

var debugging = false; // or true 
try {  
    console.log();
} catch(ex) {
    /*var*/ console = { log: function() {consoleMsg()} };   
}

1voto

Saxoier Points 1096
(function(debug) {
    var console;

    function wrapConsoleMethod(fnName) {
        if(fnName in console)
            console[ fnName ] = function(fn) {
                return function() {
                    if(debug)
                        return fn.apply(console, arguments);
                    else
                        alert('Console event in Production Code');
                };
            }(console[ fnName ]);
        else
            ; // fn not in console
    };

    if(!('console' in window))
        window.console = {
            log : function() {}
            // ...
        };
    console = window.console;
    wrapConsoleMethod('log');
    // ...
})(true /* debug */);

console.log('test');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X