Arrêtez le navigateur « throbber de malheur » lors du chargement de la comète / serveur Push iframe

StackOverflow https://stackoverflow.com/questions/1064782

Question

Lorsque vous utilisez Comet ou Ajax longue techniques Pull - un iframe est habituellement utilisé. Et tandis que iframe attend la connexion longue à se fermer, le navigateur tourne son throbber (progrès / indicateur de chargement).

Certains sites, par exemple etherpad.com, a réussi à le faire arrêter.

Comment ils le font?

Était-ce utile?

La solution

Après avoir creusé pendant un jour et une nuit dans les entrailles des internets, voici ce que je suis venu avec:

  1. serveur envoyé événements - Très cool, ne fonctionne actuellement que dans Opera, mais peuvent faire partie de HTML5 et d'autres navigateurs peuvent soutenir quelque temps. Ajoute une nouvelle balise d'élément avec le type de contenu de "application / x-événement-dom-stream", qui permet à la Serveur pour déclencher des événements dans le Client DOM . Et il ne devrait pas montrer un indicateur de progression, pour autant que je comprends. Il est également un projet de travail d'une norme, et non pas un hack comme toute chose iframe comète.

  2. XMLHttpRequest - dans Firefox et Safari, mais pas dans IE, il peut être utilisé pour le chargement de la page à long pull qui permet de gérer des fragments tels qu'ils apparaissent sur chaque événement ReadyStateChange. Ne montrer indicateur de progression *. - voir commentaire ci-dessous

  3. ActiveXObject ( « htmlfile ») - peut être utilisé dans IE pour créer une page / fenêtre qui se trouve en dehors de la portée de la fenêtre courante. Cela rend l'indicateur de progression disparaître! Le iframe sera chargé dans un navigateur invisible.

En savoir plus sur le serveur-événements envoyé:

Et plus sur les deux autres techniques (explique aussi le problème mieux): * http://meteorserver.org/browser-techniques/

Encore plus en profondeur sur chaque technique, et plus techniques:

Autres conseils

Pour moi, l'exécution d'un setTimeout sur la demande ajax tout résolu. Quand je courais la demande de document.ready, je suis le « throbber de malheur ». Mais avec setTimeout il ne se produit pas. (Ce correctif fonctionne également pour Chrome).

Juste au cas où vous devrez peut-être quelques exemples, ce gars-là ne donne une solution pour résoudre le problème firefox. http://www.shanison.com/?p=237

J'ai eu le même problème, et la solution est d'utiliser Ajax au lieu de iframe caché. Ainsi, au lieu de générer iframe quelque part dans la page:

$("#chat .msg_list").prepend('<iframe id="hidden" src="chatFrame?id=$userId" frameborder="0" height="0" width="100%"></iframe>');

je jquery appel ajax pour charger le contenu iFrame dans une div:

$('#chat #chat_comet').load('chatFrame?id=$userId');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top