Остановите «пульсатор судьбы» браузера при загрузке кометы/сервера push iframe

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

Вопрос

При использовании методов Comet или Ajax Long Pull обычно используется iframe.И пока этот iframe ожидает закрытия длительного соединения, браузер вращает свой пульсатор (индикатор прогресса/загрузки).

Некоторым веб-сайтам, например etherpad.com, удалось остановить это.

Как они это делают?

Это было полезно?

Решение

Копаясь день и ночь в недрах интернета, вот что я придумал:

  1. события, отправленные сервером. Очень круто, в настоящее время работает только в Opera, но может быть частью HTML5, и другие браузеры могут когда-нибудь его поддерживать.Добавляет новый тег элемента с типом контента «application/x-dom-event-stream», который позволяет Сервер инициировать события в Клиент DOM.И он не должен показывать индикатор прогресса, насколько я понимаю.Это также рабочий проект стандарта, а не хак, как вся эта комета iframe.

  2. XMLHttpRequest — в Firefox и Safari, но не в IE, его можно использовать для загрузки страниц с длительным запросом, что позволяет обрабатывать фрагменты по мере их появления при каждом событии ReadyStateChange.Не будет отображаться индикатор прогресса*.-- см. комментарий ниже

  3. ActiveXObject("htmlfile") — может использоваться в IE для создания страницы/окна, находящегося за пределами текущей области окна.Индикатор прогресса исчезнет!Загруженный iframe будет находиться в невидимом браузере.

Подробнее о событиях, отправленных сервером:

И еще о двух других методах (также лучше объясняет проблему):* http://meteorserver.org/browser-techniques/

Еще более подробно о каждой технике и еще больше техник:

Другие советы

Для меня запуск setTimeout по запросу ajax решил все.Когда я выполнил запрос из document.ready, я получил «пульсатор судьбы».Но с setTimeout этого не происходит.(Это исправление также работает для Chrome).

На тот случай, если вам понадобятся примеры, этот парень дал решение проблемы с Firefox.http://www.shanison.com/?p=237

У меня была та же проблема, и решением было использовать Ajax вместо скрытого iframe.Итак, вместо создания iframe где-то на странице:

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

Я использовал вызов jquery ajax для загрузки содержимого iframe в некоторый div:

$('#chat #chat_comet').load('chatFrame?id=$userId');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top