2010-10-22 1 views
4

У меня есть сайт, на котором используется кометное соединение с длинным опросом. Соединение необходимо настроить на загрузку/после загрузки страницы.Когда (мобильный) Safari/Chrome рассматривает страницу, загруженную с помощью Comet?

Несмотря на мои усилия по предотвращению этого, многие браузеры рассматривают запрос на длительный опрос как часть механизма загрузки страницы, тем самым сохраняя страницу в фазе «загрузки». В Safari это приводит к тому, что индикатор выполнения (за поле url) не заканчивается. В Chrome значок отображается в виде пиктограммы загрузки. Еще более проблематичным является мобильное сафари на iphone, которое не позволяет скрывать поле url во время загрузки. У мобильных Android одинаковые проблемы на некоторых устройствах.

В целом, поведение трудно воспроизвести и, похоже, зависит от скорости браузера/платформы/соединения/и т. Д. Прямо сейчас мой код инициирует длительный опрос 10 мсек после триггера window.onLoad. Кажется, что это работает очень часто, но не всегда. Я подозреваю, что это может иметь какое-то отношение к загрузке некоторых внешних (изображений/javascript) ресурсов, но можно сказать, что событие onLoad уволено после они полностью загружены.

Любое указание на то, как заставить эти браузеры учитывать мою страницу как загруженную? В идеале можно было бы как-то отметить xmlhttprequest как комету, но это не функция :).

+0

Смотрите также этот вопрос: http://stackoverflow.com/questions/1064782/stop-the-browser-throbber-of-doom-while -loading-comet-server-push-iframe – ralfstx

ответ

0

Мы успешно удалили индикатор загрузки в Safari 5.1.5 с помощью запросов ajax long polling. Chrome, к сожалению, все еще постоянно показывает индикатор загрузки. Для chrome наша команда выбрала просто изменить значение курсора css на весь элемент body (например: перекрестие или пользовательский курсор) - ужасный «взлом» - но по крайней мере пользователь не увидит курсор мыши загрузки, пока они находятся в системе.

4

У меня возникла такая же проблема, и я обнаружил, что если вы разрешите странице выйти из обработчика нагрузки, прежде чем выдавать свой длинный запрос ajax для опроса, все будет хорошо работать, и страница не вернется в состояние загрузки.

Так, например, то, что обычно было бы

$(document).ready(function() { $.ajax(...); });

станет

$(document).ready(function() setTimeout(function() { $.ajax(...); }, 0); });

В частном случае WebKit, я считаю, что $ (документ) .ready является синоним для window.onload. Вот почему это имеет значение.

Это работает для меня на iPad1,1 с прошивкой 5.

+0

Хотя использование 0 не решило его для меня, добавление задержки сделало трюк. «Ошибка» также присутствует в Safari 5.1.4 на Windows – BennyM