Attention à l’utilisation de console.log() dans Internet Explorer

index

Si vous avez pris l’habitude d’utiliser l’objet console pour débugger vos applications web, prenez garde, vous pourriez avoir des surprises.

En effet, sous Internet Explorer (IE), cet objet n’est instancié que si les outils de développements sont ouverts (touche F12). Par conséquent, si un console.log() traîne dans votre code, l’objet console n’étant pas défini, cela générera une erreur d’exécution du code Javascript et provoquera l’arrêt de votre script. Cette erreur est difficile à identifier car, lorsque vous ouvrirez la console d’IE pour identifier la cause du dysfonctionnement de votre application, vous ne verrez aucune erreur, l’objet console étant cette fois bien instancié.

Encore plus, fourbe : si vous refermez l’outil de développement d’IE, le script continuera à bien fonctionner. En effet, une fois défini, l’objet console reste instancié tant que l’onglet de la page n’est pas fermé.

 

Pour éviter ce genre de désagréments, plusieurs solutions :

  • n’utiliser console.log() qu’à des fins de débogage ;
  • tester que l’objet est bien instancié avant de l’utiliser.

A noter que le problème n’est plus d’actualité sous Microsoft Edge.

Un commentaire

  1. Sinon, il faut instancier un objet ayant les mêmes méthodes en cas d’absence de l’original

    (function() {
    // Union of Chrome, Firefox, IE, Opera, and Safari console methods
    var methods = [« assert », « cd », « clear », « count », « countReset »,
    « debug », « dir », « dirxml », « error », « exception », « group », « groupCollapsed »,
    « groupEnd », « info », « log », « markTimeline », « profile », « profileEnd »,
    « select », « table », « time », « timeEnd », « timeStamp », « timeline »,
    « timelineEnd », « trace », « warn »];
    var length = methods.length;
    var console = (window.console = window.console || {});
    var method;
    var noop = function() {};
    while (length–) {
    method = methods[length];
    // define undefined methods as noops to prevent errors
    if (!console[method])
    console[method] = noop;
    }
    })();

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.