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ą?
4 answers
Po kopaniu przez dzień i noc w wnętrznościach Internetu, oto co wymyśliłem:
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.
-
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
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:
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).
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
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');
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