Dans mon application ASP.Net, qui utilise beaucoup javascript et jQuery, mais aussi des pages maîtres et des éléments .Net Ajax, je vois régulièrement dans la barre d'état d'IE 6 (et parfois d'IE 7) le message "2 items remaining" ou "15 items remaining" suivi de "loading". un fichier graphique.png|gif ." Ce message ne disparaît jamais et peut ou non empêcher l'exécution de certaines fonctionnalités de la page (il semble certainement s'enliser, mais je n'en suis pas sûr).
Je peux provoquer ce phénomène dans 99 % des cas en rafraîchissant simplement une page .aspx, mais le nombre d'éléments et, parfois, le fichier mentionné, varient. En général, c'est 2, 3, 12, 13 ou 15.
J'ai cherché des réponses sur Google et il y a plusieurs suggestions ou explications. Certaines d'entre elles n'ont pas fonctionné pour nous, et d'autres ne sont pas pratiques à mettre en œuvre ou à essayer pour nous.
Voici quelques-unes des idées/théories :
-
IE ne met pas correctement en cache les images, ce qui fait qu'il demande plusieurs fois la même image si celle-ci est répétée sur la page et que le serveur suppose qu'elle doit être mise en cache localement puisqu'il l'a déjà servie dans ce contexte de page. IE affiche les images correctement, mais attend une réponse du serveur qui ne vient jamais. En général, le fichier qu'il dit attendre est répété sur la page.
-
La page utilise des graphiques PNG avec transparence. En effet, mais il s'agit de graphiques générés par jQuery-UI Themeroller qui, selon les responsables de jQuery-UI, ne présentent aucun danger pour IE. Les composants de jQuery-UI sont les seules choses qui utilisent des PNG. Toutes nos références PNG sont en CSS, si cela peut aider. J'ai changé certains des graphiques de PNG en GIF, mais il est tout aussi probable qu'il dise qu'il attend que un fichier graphique.png comme c'est le cas pour un fichier graphique.gif
-
Les images sont spécifiées dans les CSS et/ou JavaScript mais sont sur des éléments qui ne sont pas actuellement affichés (éléments display : none par exemple). Voici mai C'est vrai, mais si c'est le cas, alors je pense que le préchargement des images fonctionnerait, mais jusqu'à présent, l'ajout d'un préchargeur ne donne rien de bon.
-
La politique de mise en cache de IIS perturbe le navigateur. Si cela est vrai, seul le serveur SW de Microsoft a des problèmes avec le navigateur de Microsoft (ce qui ne me surprend pas du tout). Malheureusement, je n'ai pas beaucoup de contrôle sur la configuration de IIS qui hébergera l'application.
Quelqu'un a-t-il constaté ce phénomène et trouvé un moyen de le combattre ? En particulier sur les applications ASP.Net avec jQuery et jQuery-UI ?
UPDATE
Une autre donnée : sur au moins une des pages, il suffit de commenter la configuration du composant Datepicker de jQuery-UI pour que le problème disparaisse, mais je ne pense pas (ou du moins je ne suis pas sûr) que cela répare toutes les pages. Si cela les "répare", je devrai changer de plug-in car cette fonctionnalité doit être présente. Il ne semble pas y avoir de problèmes ouverts contre jQuery-UI sur IE6/7 actuellement...
MISE À JOUR 2
J'ai vérifié les paramètres de IIS et "activer l'expiration du contenu" était no sur aucun de mes dossiers. Décocher ce paramètre était une suggestion courante pour résoudre ce problème.
J'ai une autre page, plus simple, sur laquelle je peux systématiquement créer l'erreur. J'utilise le fichier jQuery-UI 1.6rc6 (bien que j'aie également essayé jQuery-UI 1.7.1 avec les mêmes résultats). Le problème ne se produit que lorsque je rafraîchis la page qui contient le Datepicker de jQuery-UI. Si je mets en commentaire la configuration du Datepicker, le problème disparaît. Voici quelques éléments que je remarque lorsque je fais cela :
- Cette page indique toujours "(1 item restant) Downloading picture http:///images/Calendar\_scheduleHS.gif", mais seulement lors du rechargement.
- Lorsque je regarde le journal HTTP, je vois qu'il demande cette image au serveur chaque fois qu'il est activé dynamiquement, sans tenir compte de la mise en cache.
- Toutes les demandes concernant ce graphique sont complètes et renvoient le graphique correctement. Aucune n'est marquée du code 200 ou 304 (indiquant que le serveur demande à IE d'utiliser la version en cache). Je n'ai aucune idée de la raison pour laquelle il est indiqué que ce graphique est en attente alors que toutes les demandes ont été effectuées.
- Il y a un seul autre graphique sur la page (un des fichiers PNG de l'interface utilisateur) qui a un code 304 (non modifié). Sur une autre page où j'ai réussi à enregistrer le trafic HTTP avec "2 items remaining", deux fichiers graphiques différents (tous deux des PNG d'interface utilisateur) avaient également un code 304 (mais aucun n'était répertorié comme "Downloading".
- Cette erreur n'est pas anodine - la page n'est pas entièrement réactive. Par exemple, si je clique sur l'un des boutons qui devrait exécuter une action côté client, la page s'actualise.
- Le fait de quitter la page et d'y revenir ne produit pas l'erreur.
- J'ai déplacé les références script et script en bas du contenu et cela n'affecte pas ce problème. Le script est toujours en cours d'exécution dans le $(document).ready() cependant (c'est trop épineux pour le diviser sauf si je dois absolument le faire).
MISE À JOUR FINALE ET RÉPONSE
Il y avait beaucoup de bonnes réponses et suggestions ci-dessous, mais aucune d'entre elles ne correspondait exactement à notre problème. La réponse la plus proche (et celle qui m'a conduit à la solution) était celle concernant les JavaScript longs, j'ai donc attribué la prime à cet endroit (je suppose que j'aurais pu y répondre moi-même, mais je préfère récompenser les informations qui mènent à des solutions).
Voici notre solution : Nous avions plusieurs sélecteurs de date jQueryUI qui étaient créés sur l'événement $(document).ready dans le script inclus depuis la page maîtresse ASP.Net. Sur cette page client, l'événement $(document).ready d'un script local avait script qui détruisait les sélecteurs de date sous certaines conditions. Nous avons dû utiliser "destroy" parce que la version précédente du datepicker avait un problème avec "disable". Lorsque nous sommes passés à la dernière version de jQuery UI (1.7.1) et que nous avons remplacé les "destroy" par des "disable" pour les sélecteurs de date, le problème a disparu (ou presque - si vous faites les choses trop rapidement pendant le chargement de la page, il est toujours possible d'obtenir le statut "n items remaining").
Ma théorie sur ce qui s'est passé est la suivante :
- Le contenu de la page se charge et comporte 12 ou boîtes de texte avec la classe datepicker classe.
- La page maître script crée des sélecteurs de date sur ces zones de texte.
- IE met en file d'attente les demandes pour chaque graphique du calendrier indépendamment car IE ne sait pas comment mettre correctement en cache les images dynamiques dynamiques.
- Avant que les demandes ne soient traitées, la zone client script détruit ces sélecteurs de date afin que les graphiques ne sont plus nécessaires.
- IE se retrouve avec un certain nombre de demandes orphelines dont il ne sait pas ne sait pas quoi faire.