Подтвердить что ты не робот

Остановите браузер "throbber of doom" при загрузке кометы/сервера push iframe

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

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

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

4b9b3361

Ответ 1

После копания в течение дня и ночи в кишках интернетов, вот что я придумал:

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

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

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

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

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

Еще глубже о каждом методе и других методах:

Ответ 2

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

Ответ 3

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

Ответ 4

У меня была та же проблема, и решение заключалось в использовании 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');