#firefox #progress-bar #loading
#firefox #индикатор выполнения #Загрузка
Вопрос:
Я хочу знать, как работает индикатор выполнения загрузки веб-страницы в FF, когда в заголовках http нет длины содержимого. Я проверил с google.com он не отправляет заголовок длины содержимого, но индикатор выполнения работает правильно. Это настоящий индикатор выполнения или поддельный? Если это поддельный, то как я могу создать аналогичный.
Я создаю приложение для iPhone, где мне нужно создать аналогичный индикатор выполнения загрузки.
Обновление 1
@Robot Woods — Я только что искал «привет» в Google, и я вижу индикатор выполнения внизу .. прямо сейчас я на Windows 7 и FF 3.6.13
Вот заголовки ответов, которые я получаю —
И я не вижу заголовка content length…
Как FF может сгенерировать индикатор выполнения, если длина содержимого отсутствует ..??
Комментарии:
1. не могли бы вы немного подробнее описать пример, на который вы смотрите? при поиске в Google я не вижу индикатор выполнения (FF 3.6.17), поэтому я не могу воспроизвести ваш сценарий для тестирования. Я вижу панель при загрузке начального google.com страница, но заголовок длины содержимого включен туда, поэтому я вижу, что это не та ситуация, над которой вы работаете. Спасибо.
2. @Robot Woods — смотрите отредактированный вопрос
Ответ №1:
Я не знаю, что делает Firefox, но если бы это был я, я бы посмотрел на следующее:
Начальная страница обычно загружается довольно быстро. Начните анализировать его, пока он все еще поступает, и начните использовать другие ресурсы (css, js, изображения и т.д.), Которые требуются странице.
Используйте индикатор выполнения, чтобы показать, сколько времени займет загрузка вспомогательных файлов, и оценить страницу на основе пессимистичного среднего значения для других файлов этого типа, которые вы загрузили ранее.
Что многие программы делают со своим индикатором выполнения, когда у них нет информации, так это предоставляют индикатор выполнения, который замедляется по мере приближения к концу. Он никогда не доходит до конца, но продолжает двигаться до тех пор, пока данные продолжают поступать.
Комментарии:
1. Спасибо за ответ, но не могли бы вы, пожалуйста, немного объяснить, как я должен реализовать это для iPhone sdk. Как я могу увеличить индикатор выполнения, если у меня нет общего размера страницы?
2. @Saurabh Перечитайте последний абзац моего ответа. В качестве примера, если вы не знаете размер страницы, вы можете увеличивать индикатор выполнения на 1/2 оставшейся части строки каждую секунду. Итак, в первую секунду перейдите на 50%. На вторую секунду перейдите к 75%. На третью секунду переходите к 87,5%. Каждый раз преодолевайте половину оставшегося расстояния. Таким образом, пользователь видит, что есть прогресс, но на самом деле вы не дойдете до конца строки, пока продолжаете загрузку. Как только у вас будет страница, перейдите на 100%.
3. Большое спасибо!! Если я не получу более хорошего ответа, я назначу награду вам!… Еще раз спасибо!
Ответ №2:
Но что вы хотите загрузить? Является ли FF просто примером индикатора выполнения здесь?
Если вы хотите подключиться к сети с помощью NSURLConnection и показать ход загрузки, вы можете просто сделать это с помощью объекта UIProgressView. Имейте в виду, что я пропустил вашу обработку данных и просто записал событие progress.
// Методы делегирования NSURLConnection - (недействительное) соединение: (NSURLConnection *) ответ на получение соединения: (NSURLResponse *) ответ{ //length - это длинное значение, объявленное снаружи длина = [ожидаемый ответ ContentLength]; } - (недействительное) соединение: (NSURLConnection *) данные, полученные соединением: (NSData *) данные { NSNumber * получено = [NSNumber numberWithUnsignedInteger: [длина данных]]; NSNumber * total = [NSNumber numberWithLongLong:длина]; коэффициент float = [полученное значение floatValue] / [значение toplam floatValue]; [[YourUIProgressView ProgressBar] setProgress:ratio]; }
Удачи.
Комментарии:
1. Я знаю вышеупомянутые методы .. но вопрос в том, что, если expectedContentLength дает вам -1? потому что google.com не отправляйте заголовок длины содержимого, поэтому ожидаемая длина содержимого неверна. Но когда вы посещаете google.com в FF вы можете увидеть индикатор выполнения там…
2. и да, я хочу показать ход загрузки веб-страницы. Приведенная выше страница работает хорошо, если длина содержимого присутствует в заголовке, но как показать прогресс, его там нет..
3. Вы не сможете получить точный прогресс, если его там нет. Вы можете только имитировать это. Но, конечно, это не будет надежным для пользователей. Извините, не вижу, что есть в FF, мне не очень нравится 3rd party на моем Mac.