Bogue IE9 - JavaScript ne fonctionne qu'une fois les outils de développement ouverts.
Notre site propose des téléchargements gratuits de pdf aux utilisateurs, et il a une simple fonction "entrer le mot de passe pour télécharger". Cependant, cela ne fonctionne pas du tout dans Internet Explorer.
Vous pouvez voir par vous-même dans cet exemple .
Le pass de téléchargement est "makeuseof". Dans tout autre navigateur, cela fonctionne bien. Dans IE, les deux boutons ne font rien.
La chose la plus curieuse que j'ai trouvée est que si vous ouvrez et fermez la barre d'outils du développeur avec F12, tout commence soudainement à fonctionner.
Nous avons essayé le mode de compatibilité et tel, rien ne fait de différence.
Comment faire pour que cela fonctionne dans Internet Explorer?
la source
gulp-strip-debug
. Il supprime toutes lesconsole.*
méthodes, idéales pour les builds de production ou les tests dans IE.console
, mais à mon utilisation angulaire et à la mise en cache des requêtes get. Voir les réponses ici et ici pour en savoir plus.Réponses:
Il semble que vous ayez du code de débogage dans votre javascript.
L'expérience que vous décrivez est typique du code qui contient
console.log()
ou toute autreconsole
fonctionnalité.L'
console
objet n'est activé que lorsque la barre d'outils de développement est ouverte. Avant cela, l'appel de l'objet console entraînera son rapport en tant queundefined
. Une fois la barre d'outils ouverte, la console existera (même si la barre d'outils est fermée par la suite), vos appels de console fonctionneront alors.Il existe quelques solutions à cela:
Le plus évident est de parcourir votre code en supprimant les références à
console
. De toute façon, vous ne devriez pas laisser des trucs comme ça dans le code de production.Si vous souhaitez conserver les références de la console, vous pouvez les encapsuler dans une
if()
instruction ou une autre condition qui vérifie si l'objet console existe avant d'essayer de l'appeler.la source
if(!console) {console={}; console.log = function(){};}
if(!console)
provoquera la même erreur - il devrait lireif(!window.console)
HTML5 Boilerplate a un joli code pré-fait pour résoudre les problèmes de console:
Comme @ plus indiqué dans les commentaires, la dernière version est disponible sur leur page GitHub
la source
src
sous- répertoireVoici une autre raison possible en plus du
console.log
problème (au moins dans IE11):Lorsque la console n'est pas ouverte, IE effectue une mise en cache assez agressive, alors assurez-vous que la mise en cache de tous les
$.ajax
appels ouXMLHttpRequest
appels est définie sur false.Par exemple:
Lorsque la console développeur est ouverte, la mise en cache est moins agressive. Semble être un bug (ou peut-être une fonctionnalité?)
la source
Cela a résolu mon problème après y avoir apporté une modification mineure. J'ai ajouté ce qui suit dans ma page html afin de résoudre le problème IE9:
la source
Outre le
console
problème d'utilisation mentionné dans la réponse acceptée et d'autres, il existe au moins une autre raison pour laquelle parfois les pages d'Internet Explorer ne fonctionnent qu'avec les outils de développement activés.Lorsque les outils de développement sont activés, IE n'utilise pas vraiment son cache HTTP (au moins par défaut dans IE 11) comme il le fait en mode normal.
Cela signifie que si votre site ou votre page a un problème de mise en cache (s'il cache plus qu'il ne devrait par exemple - c'était mon cas), vous ne verrez pas ce problème en mode F12. Donc, si le javascript effectue certaines requêtes AJAX mises en cache, elles peuvent ne pas fonctionner comme prévu en mode normal et fonctionner correctement en mode F12.
la source
Je suppose que cela pourrait aider, en ajoutant ceci avant toute balise de javascript:
la source
try catch
détecter qu'une variable existe est une mauvaise idée. Non seulement c'est lent, mais si vous avez plus d'une instruction dans votre bloc try, vous pouvez obtenir une exception pour une raison différente. Ne l'utilisez pas, à tout le moins, utilisezif (typeof console == 'undefined')
Si vous utilisez AngularJS version 1.X, vous pouvez utiliser le service $ log au lieu d'utiliser directement console.log.
https://docs.angularjs.org/api/ng/service/$log
Donc, si vous avez quelque chose de similaire à
vous pouvez le remplacer par
Angular 2+ n'a pas de service de journal intégré .
la source
Si vous utilisez
angular
et c'est-à-dire9, 10
ouedge
utilisez:Pour désactiver complètement
cache
.la source
C'est arrivé dans IE 11 pour moi. Et j'appelais la fonction jquery .load. Je l'ai donc fait à l'ancienne et j'ai mis quelque chose dans l'URL pour désactiver le cache.
la source
J'ai encore une autre alternative pour les solutions proposées par runeks et todotresde qui évite également les pièges discutés dans les commentaires à la réponse de Spudley :
C'est un peu délicat mais d'un autre côté, il est concis et couvre toutes les méthodes de journalisation couvertes par la réponse de runeks et il a l'énorme avantage que vous pouvez ouvrir la fenêtre de console d'IE à tout moment et les journaux arrivent.
la source
Nous avons rencontré ce problème sur IE 11 sur Windows 7 et Windows 10. Nous avons découvert quel était exactement le problème en activant les capacités de débogage pour IE (IE> Options Internet> onglet Avancé> Navigation> Décocher Désactiver le débogage de script (Internet Explorer) ). Cette fonctionnalité est généralement vérifiée dans notre environnement par les administrateurs de domaine.
Le problème était dû au fait que nous utilisions la
console.debug(...)
méthode dans notre code JavaScript. L'hypothèse faite par le développeur (moi) était que je ne voulais rien écrire si la console des outils de développement client n'était pas explicitement ouverte. Alors que Chrome et Firefox semblaient d'accord avec cette stratégie, IE 11 ne l'aimait pas du tout. En changeant toutes lesconsole.debug(...)
instructions enconsole.log(...)
instructions, nous avons pu continuer à enregistrer des informations supplémentaires dans la console client et à les afficher lorsqu'elle était ouverte, mais sinon, à les cacher à l'utilisateur type.la source
J'ai mis la résolution et corrigé mon problème. On dirait que la demande AJAX que j'ai mise dans mon JavaScript n'était pas en cours de traitement car ma page avait un problème de cache. si votre site ou page a un problème de mise en cache, vous ne verrez pas ce problème en mode développeurs / F12. mon JavaScript AJAX mis en cache demande que cela ne fonctionne pas comme prévu et que l'exécution s'arrête, ce qui ne pose aucun problème à F12. Il suffit donc d'ajouter un nouveau paramètre pour rendre le cache faux.
Il semble qu'IE ait spécifiquement besoin que ce soit faux pour que l'activité AJAX et javascript fonctionne bien.
la source