HTML-кеш автономного приложения, список загруженных файлов

Как часть экрана загрузки для автономного веб-приложения, которое я создаю (используя манифест кэша), я хотел бы отобразить точный индикатор выполнения, который позволит пользователям узнать, какие файлы уже были загружены, а какие еще ожидают загрузки. Что-то вроде следующего:

Loading...
/assets/images/logo.png: loaded
/assets/images/splashImage.png: pending

Я знаю, что могу использовать кеширование «ожидающих» событий, но я не вижу, чтобы аргументы события имели какие-либо данные, связанные с ними.

Есть какой-либо способ сделать это?


person Peder Rice    schedule 25.02.2011    source источник


Ответы (2)


Существует событие progress, которое запускается при загрузке каждого файла, однако его полезная нагрузка не включает имя файла ни в одном браузере, который я тестировал (Chrome, Safari, бета-версия FF). Chrome отображает имя файла в консоли (хотя, насколько я знаю, это недоступно для JS), но ни Safari, ни FF не заходят так далеко. И из того, что я видел, файлы загружаются не в том порядке, в котором они перечислены в манифесте, поэтому нет даже способа создать упорядоченный список, а затем удалять их по одному.

Итак, отвечая на ваш вопрос, нет, нет никакого способа сделать это прямо сейчас. Возможно, в будущем событие progress будет включать имя файла — по крайней мере, в некоторых браузерах — но сейчас это невозможно.

Я должен добавить, что в Chrome (а не в Safari или FF) вы можете, по крайней мере, получить количество загружаемых файлов, что позволит вам, по крайней мере, рассчитать точный индикатор выполнения. Чтобы получить это в Chrome, вы должны использовать следующее:

function downloadProgress(e) {
    totalfiles = Number(e.total);
}
window.applicationCache.addEventListener("progress", downloadProgress, false);

Однако это приведет к ошибке в других браузерах, поэтому вам нужно обернуть try/catch или какой-либо другой метод (typeof(e.total)), чтобы избежать ошибки.

person ggutenberg    schedule 25.02.2011
comment
Это соответствует тому, что я читал. Я буду держать пальцы скрещенными, чтобы это попало в будущую спецификацию. - person Peder Rice; 25.02.2011
comment
Надеюсь на это, но я бы не стал на это ставить. Из того, что я читал о пути, который они прошли в HTML5, они хотели предоставить браузерам возможность делать индикатор выполнения, показывать файлы и т. д., а также иметь своего рода файловый браузер для разных сайтов, которые можно было бы удалить вручную. - person Myforwik; 03.11.2012
comment
Для меня Chrome также предоставил e.loaded, что очень удобно. Обратите внимание, что вы связываете событие с JQuery, например $( appCache ).bind("progress",function( event ){});. Загружается и тотал теряется. - person jpprade; 01.05.2015

Это запоздало на несколько лет, но, возможно, это поможет кому-то еще, кто исследует это. Он не перечисляет файлы или что-то еще, но показывает точный индикатор выполнения, основанный на общем количестве загруженных файлов. Возможно, все еще потребуется небольшая работа... https://github.com/joelabeyta/app-cache-percent-bar

person Joel Abeyta    schedule 31.03.2014