253 votes

Qu'est-il arrivé à console.log dans IE8?

Selon ce post, il était dans la version bêta, mais ce n'est pas dans la version?

257voto

Mister Lucky Points 3294

console.log n'est disponible qu'après avoir ouvert les outils de développement (F12 pour l'ouvrir et la fermer). Ce qui est amusant, c'est qu'après l'avoir ouvert, vous pouvez le fermer, puis le publier via les appels console.log, et ceux-ci seront visibles lorsque vous le rouvrirez. Je pense que c'est un bug de toutes sortes, et peut être corrigé, mais nous verrons.

Je vais probablement utiliser quelque chose comme ça:

 function trace(s) {
  if ('console' in self && 'log' in console) console.log(s)
  // the line below you might want to comment out, so it dies silent
  // but nice for seeing when the console is available or not.
  else alert(s)
}
 

et encore plus simple:

 function trace(s) {
  try { console.log(s) } catch (e) { alert(s) }
}
 

228voto

orange80 Points 5822

Encore mieux pour le retour est la suivante:



   var alertFallback = true;
   if (typeof console === "undefined" || typeof console.log === "undefined") {
     console = {};
     if (alertFallback) {
         console.log = function(msg) {
              alert(msg);
         };
     } else {
         console.log = function() {};
     }
   }
 

56voto

Walter Stabosz Points 3012

C'est mon point de vue sur les différentes réponses. Je voulais vraiment voir les messages consignés, même si je n'ai pas eu l'IE console ouverte quand ils ont été tirés, j'ai donc de les pousser dans une console.messages tableau que j'ai créer. J'ai également ajouté une fonction d' console.dump() pour faciliter la visualisation de l'ensemble du journal. console.clear() de vider la file d'attente de messages.

Ces solutions aussi des "poignées" l'autre Console méthodes (qui, je crois, tous originaires de la Console de Firebug API)

Enfin, cette solution est dans la forme d'une IIFE, afin de ne pas polluer la portée globale. Le secours argument de fonction est définie dans le bas de la code.

Je viens de tomber de mon maître JS fichier qui est inclus sur chaque page, et l'oublier.

(function (fallback) {    

    fallback = fallback || function () { };

    // function to trap most of the console functions from the FireBug Console API. 
    var trap = function () {
        // create an Array from the arguments Object           
        var args = Array.prototype.slice.call(arguments);
        // console.raw captures the raw args, without converting toString
        console.raw.push(args);
        var message = args.join(' ');
        console.messages.push(message);
        fallback(message);
    };

    // redefine console
    if (typeof console === 'undefined') {
        console = {
            messages: [],
            raw: [],
            dump: function() { return console.messages.join('\n'); },
            log: trap,
            debug: trap,
            info: trap,
            warn: trap,
            error: trap,
            assert: trap,
            clear: function() { 
                  console.messages.length = 0; 
                  console.raw.length = 0 ;
            },
            dir: trap,
            dirxml: trap,
            trace: trap,
            group: trap,
            groupCollapsed: trap,
            groupEnd: trap,
            time: trap,
            timeEnd: trap,
            timeStamp: trap,
            profile: trap,
            profileEnd: trap,
            count: trap,
            exception: trap,
            table: trap
        };
    }

})(null); // to define a fallback function, replace null with the name of the function (ex: alert)

Quelques informations supplémentaires

La ligne var args = Array.prototype.slice.call(arguments); crée un Tableau à partir de l' arguments Objet. Cela est nécessaire parce que les arguments n'est pas vraiment un Tableau.

trap() est un gestionnaire par défaut pour toutes les fonctions de l'API. Je passe les arguments d' message de sorte que vous obtenez un journal des arguments qui ont été transmises à un appel d'API (pas seulement console.log).

Modifier

J'ai ajouté un supplément de tableau console.raw qui capture les arguments exactement comme passé de trap(). J'ai réalisé qu' args.join(' ') a été la conversion des objets à la chaîne de caractères "[object Object]" qui peut parfois être indésirable. Grâce bfontaine pour la suggestion.

52voto

James Wheare Points 2753

Il est à noter que console.log dans IE8 n'est pas une vraie fonction Javascript. Il ne supporte pas les méthodes apply ou call .

44voto

Leif Wickland Points 1954

En supposant que vous ne vous souciez pas d'une solution de repli à l'alerte, voici une façon encore plus concise de contourner les lacunes d'Internet Explorer:

 var console=console||{"log":function(){}};
 

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