Вопрос по ajax – Остановите браузер «Throbber of Doom» во время загрузки комета / сервера push iframe

32

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

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

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

Я хочу отключить панель загрузки, которую вы видите в своем браузере (обычно в верхнем правом углу или в адресной строке). Evgeny
Есть много полос загрузки, на какую вы ссылаетесь, это браузер или часть ОС? Ape-inago

Ваш Ответ

4   ответа
17

server-sent events - Very cool, currently works only in Opera, but may be part of HTML5 and other browsers may support it sometime. Adds a new element tag with content-type of "application/x-dom-event-stream" which allows the Server to fire events in the Client DOM. And it should not show a progress indicator, as far as I understand. It's also a working draft of a standard, and not a hack like the whole iframe comet thing.

XMLHttpRequest - in Firefox and Safari, but not in IE, it can be used for long-pull page loading that enables to handle fragments as they appear on each readyStateChange event. Will not show progress indicator*. -- see comment below

ActiveXObject("htmlfile") - can be used in IE to create a page/window that is outside of the current window scope. This makes the progress indicator go away! The loaded iframe will be in an invisible browser.

Больше о server-sent-events:

http://my.opera.com/WebApplications/blog/show.dml/438711

And more about the other two techniques (also explains the problem better): * http://meteorserver.org/browser-techniques/

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

http://cometdaily.com/2007/12/11/the-future-of-comet-part-1-comet-today/ http://cometdaily.com/2008/01/10/the-future-of-comet-part-2-html-5’s-server-sent-events/
При использовании метода (2), XHR, он должен быть вызван ПОСЛЕ завершения загрузки страницы. Например, используя setTimeout (). Если он запустится до того, как страница закончит вращение пульсатора, он продолжит вращать его во время загрузки XHR - и "ESC". может прервать его, так что это плохо. Evgeny
@Evgeny К сожалению, решение для тайм-аута не работает в Chrome, оно все еще дает мне индикатор загрузки (хотя работает в Firefox). Есть намеки?
Спасибо за комментарий Евгений. Я уже несколько недель бьюсь головой о свою страницу. Добавление нескольких секунд тайм-аута перед опросом устранило мою проблему с пульсометром страницы.
3

запрос из document.ready, я получил «throbber of doom». Но с setTimeout этого не происходит. (Это исправление также работает для Chrome).

1

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

0

и решение было использовать 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');
Принятый ответ уже объясняет, как использовать ajax. Evgeny
Да, но это было не так очевидно для меня в первый раз, поэтому я написал более простой ответ.

Похожие вопросы