667 votes

Pourquoi Javascript ne fonctionne qu'après l'ouverture des outils de développement dans IE une fois?

IE9 Bug Javascript ne fonctionne qu'après l'ouverture d'outils pour les développeurs une fois.

Notre site propose gratuitement des téléchargements de fichiers pdf pour les utilisateurs, et il a un simple "entrer le mot de passe pour télécharger" de la fonction. Toutefois, il ne fonctionne pas dans Internet Explorer.

Vous pouvez voir par vous-même dans cet exemple: http://www.makeuseof.com/pages/how-to-use-virtual-box

Le téléchargement de passe est "makeuseof". Dans n'importe quel autre navigateur, il fonctionne très bien. Dans IE, les boutons à la fois ne rien faire.

Le plus curieux de l'affaire que j'ai trouvé est que si vous ouvrez et fermez les développeurs de la barre d'outils avec la touche F12, il tout d'un coup commence à travailler.

Nous avons essayé le mode de compatibilité et de telle sorte, rien ne fait une différence. S'il vous plaît, m'aider à comprendre cela!

Comment puis-je faire ce travail dans Internet Explorer?

834voto

Spudley Points 85371

Il semble que vous pourriez avoir un peu de débogage de code dans votre fichier javascript.

L'expérience que vous décrivez est typique de code qui contiennent console.log() ou de toute autre console fonctionnalités.

L' console objet est activé uniquement lorsque le Dev de la Barre d'outils s'ouvre. Avant cela, l'appel de la console de l'objet, il est rapportée comme undefined. Après la barre d'outils a été ouvert, la console (même si la barre d'outils est ensuite fermé), de sorte que votre console appels de travailler.

Il existe quelques solutions à ce problème:

Le plus évident est de passer par votre code, la suppression des références à console. Vous ne devriez pas laisser des trucs comme ça dans le code de production de toute façon.

Si vous voulez garder la console de références, vous pouvez les envelopper dans un if() déclaration, ou de quelque autre condition vérifie si l'objet console existe avant d'essayer de l'appeler.

167voto

Tallmaris Points 4185

HTML5 Boilerplate a un joli code pré-fabriqué pour la résolution des problèmes de console:

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

Comme @ plus- pointé dans les commentaires, la dernière version est disponible sur leur page GitHub

158voto

user3916095 Points 21

Voici une autre raison possible en plus du problème console.log (au moins dans IE11):

Lorsque la console est pas ouvert, IE ne cache assez agressif, alors assurez - vous que toute $.ajax appels ou XMLHttpRequest des appels ont mise en cache est défini sur false.

Par exemple:

 $.ajax({cache: false, ...})
 

Lorsque la console du développeur est ouverte, la mise en cache est moins agressive. Semble être un bug (ou peut-être une fonctionnalité?)

66voto

runeks Points 281

Ceci a résolu mon problème après que j'ai fait un changement mineur à lui. J'ai ajouté ce qui suit dans ma page html afin de résoudre le problème IE9:

 <script type="text/javascript">
    // IE9 fix
    if(!window.console) {
        var console = {
            log : function(){},
            warn : function(){},
            error : function(){},
            time : function(){},
            timeEnd : function(){}
        }
    }
</script>
 

18voto

todotresde Points 364

Je suppose que cela pourrait aider, en ajoutant cela avant toute balise de javascript:

 try{
  console
}catch(e){
   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