Detenga el navegador "throbber of doom" mientras carga el iframe de inserción de cometa/servidor

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

Pregunta

Cuando se utilizan técnicas Comet o Ajax Long Pull, generalmente se utiliza un iframe.Y mientras ese iframe espera que se cierre la conexión larga, el navegador hace girar su vibración (el indicador de progreso/carga).

Algunos sitios web, por ejemplo etherpad.com, lograron detenerlo.

¿Cómo lo hicieron?

¿Fue útil?

Solución

Después de investigar durante un día y una noche en las entrañas de Internet, esto es lo que se me ocurrió:

  1. Eventos enviados por el servidor: muy interesante, actualmente solo funciona en Opera, pero puede ser parte de HTML5 y es posible que otros navegadores lo admitan en algún momento.Agrega una nueva etiqueta de elemento con tipo de contenido "application/x-dom-event-stream" que permite Servidor para disparar eventos en el Cliente DOM.Y no debería mostrar un indicador de progreso, según tengo entendido.También es un borrador de trabajo de un estándar, y no un truco como todo el asunto del cometa iframe.

  2. XMLHttpRequest: en Firefox y Safari, pero no en IE, se puede utilizar para cargas prolongadas de páginas que permiten manejar fragmentos tal como aparecen en cada evento readyStateChange.No mostrará el indicador de progreso*.- ver comentario a continuación

  3. ActiveXObject("htmlfile"): se puede utilizar en IE para crear una página/ventana que esté fuera del alcance de la ventana actual.¡Esto hace que el indicador de progreso desaparezca!El iframe cargado estará en un navegador invisible.

Más información sobre eventos enviados por el servidor:

Y más sobre las otras dos técnicas (también explica mejor el problema):* http://meteorserver.org/browser-techniques/

Aún más en profundidad sobre cada técnica, y más técnicas:

Otros consejos

Para mí, la ejecución de un setTimeout sobre la solicitud ajax resuelto todo. Cuando me encontré con la solicitud de document.ready, me dieron el "Throbber de la fatalidad". Pero con setTimeout no sucede. (Esta solución también funciona en Chrome).

Sólo en caso de que usted puede necesitar algunos ejemplos, este hombre dio una solución para resolver el problema Firefox. http://www.shanison.com/?p=237

Tuve el mismo problema y la solución fue usar Ajax en lugar del iframe oculto.Entonces, en lugar de generar un iframe en algún lugar de la página:

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

Usé la llamada jquery ajax para cargar el contenido del iframe en algún div:

$('#chat #chat_comet').load('chatFrame?id=$userId');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top