Zatrzymaj przeglądarkę "throbber of doom" podczas ładowania comet / server push iframe

Przy użyciu Comet, lub Ajax Long Pull techniki-iframe jest zwykle używany. I podczas gdy iframe czeka na zamknięcie długiego połączenia, przeglądarka kręci pulsatorem (wskaźnik postępu/ładowania).

Niektóre strony internetowe, na przykład etherpad.com / align = "left" /

Jak oni to robią?

Author: Evgeny, 2009-06-30

4 answers

Po kopaniu przez dzień i noc w wnętrznościach Internetu, oto co wymyśliłem:

  1. Server-sent events - bardzo fajne, obecnie działa tylko w Operze, ale może być częścią HTML5 i inne przeglądarki mogą go kiedyś obsługiwać. Dodaje nowy znacznik elementu o typie zawartości "application / x-dom-event-stream", który pozwala serwerowi uruchamiać zdarzenia w kliencie Dom. I nie powinien pokazywać wskaźnika postępu, o ile rozumiem. To także roboczy szkic standardu, a nie włamanie jak cała sprawa z kometą iframe.

  2. XMLHttpRequest-w Firefoksie i Safari, ale nie w IE, może być używany do długotrwałego ładowania strony, który umożliwia obsługę fragmentów, które pojawiają się przy każdym zdarzeniu readyStateChange. Nie pokazuje wskaźnika postępu*. -- patrz komentarz poniżej

  3. ActiveXObject ("htmlfile") - może być użyty w IE do wytworzenia strony / okna, które znajduje się poza bieżącym zakresem okna. To sprawia, że postęp / align = "left" / Załadowany iframe będzie w niewidocznej przeglądarce.

Więcej o server-sent-events:

I więcej o pozostałych dwóch technikach (również wyjaśnia problem lepiej): * http://meteorserver.org/browser-techniques/

Jeszcze bardziej szczegółowo o każdej technice i więcej techniki:

 17
Author: Evgeny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-17 01:35:19

Dla mnie uruchomienie setTimeout na żądaniu ajax rozwiązało wszystko. Kiedy uruchomiłem wniosek z dokumentu.gotowy, mam "throbber of doom". Ale z setTimeout tak się nie dzieje. (Ta poprawka działa również w Chrome).

 3
Author: Ron Reiter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 23:07:47

Na wszelki wypadek, gdybyś potrzebował kilku przykładów, ten facet podał rozwiązanie problemu z Firefoksem. http://www.shanison.com/?p=237

 1
Author: jame,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-10 15:24:38

Miałem ten sam problem i rozwiązaniem było użycie Ajax zamiast ukrytego iframe. Więc zamiast generować iframe gdzieś na stronie:

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

Użyłem wywołania jQuery ajax do załadowania zawartości iframe do jakiegoś div:

$('#chat #chat_comet').load('chatFrame?id=$userId');
 0
Author: Maciek Łoziński,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-18 11:13:33