2014-10-07 2 views
0

Я пишу офлайн-приложение.предотвращает вызов ajax, если кэш приложения обновляется

У меня есть файлы манифеста для моего приложенияCache. и у меня есть обработчики для событий appCache. Я хочу определить, загружаются ли файлы в первый раз или обновляются. потому что в случае их обновления я хотел бы предотвратить запуск моего кода приложения, так как обновить браузер после обновления моего приложения.

моя конкретная проблема в том, что, когда «проверка» события увольняют, статус applicationCache уже «ЗАГРУЗКА»,

ли кто-нибудь знает, как получить applicationCache.status перед любым манифеста или файлов получает загружены?

спасибо заранее за любой ответ

window.applicationCache.addEventListener('checking', function (event) { 
    console.log("Checking for updates."); 
    console.log("inside checking event, appcache status : %s", applicationCache.status); 
}, false); 

window.applicationCache.addEventListener('updateready', function (e) { 
    if (window.applicationCache.status == window.applicationCache.UPDATEREADY) { 
     // Browser downloaded a new version of manifest files 
     window.location.reload(); 
    } 
}, false); 

window.applicationCache.addEventListener('downloading', function (event) { 
    appCommon.information("New version available", "Updating application files...", null, null); 
}, false); 

window.applicationCache.addEventListener('progress', function (event) { 
    $("#informationModal").find(".modal-body").html("Updating application files... " + event.loaded.toString() + " of " + event.total.toString()); 
}, false); 

window.applicationCache.addEventListener('cached', function (event) { 
    $("#informationModal").find(".modal-body").html("Application up to date."); 
    setTimeout(function() { $("#informationModal").find(".close").click(); }, 1000); 
}, false); 

ответ

1

По событию specificationchecking всегда первое событие.

Пользовательский агент проверяет наличие обновлений или пытается загрузить манифест в первый раз. Это всегда первое событие в последовательности.

Я думаю, что это ошибка, чтобы обновить браузер, поскольку это не приведет к автоматической загрузке новой копии. Если вы посмотрите на MDN guide для использования applicationCache, вы увидите, что файлы всегда загружаются из applicationCache, а затем переходят к циклу событий, которые вы пытались избежать, обновляя.

Вместо обновления вы должны просто правильно использовать жизненный цикл событий applicationCache, чтобы инициализировать и запускать приложение.

Я бы хотел предотвратить запуск моего кода приложения, так как обновить браузер после обновления моего приложения.

У вас есть много контроля, когда приложение начинает работать, если вы действительно хотите, чтобы обновить браузер, просто всегда запустить приложение после updateready или noupdate событий, но на самом деле, вместо того, чтобы обновлять кажется, что вы должны вместо этого используйте window.applicationCache.swapCache.

Я нашел это question and answer полезным.

+0

Спасибо за ответ, я уже использую updateready event, вот где я обновляю свой браузер, чтобы гарантировать, что пользователь использует последний код, я не могу использовать swapcache, так как это нормально для изображений, но вот что происходит здесь что приложение js изменилось, поэтому мне нужно обновить. Моя особая проблема заключается в том, что событие «проверка» уволено поздно, когда оно уволено, файлы уже начали загрузку ... что я считаю полезным из вашего ответа, хотя, инициализирует мое приложение после обновлений или событий noupdate –

+1

Ваше приложение должно быть возможность загрузки нового приложения JavaScript с помощью swapCache. Попробуйте добавить тег скрипта с src на JavaScript, который выдает предупреждение «foo», а затем измените это на «bar» предупреждений. Он должен предупреждать панель без обновления, точно так же как она должна загружать новые изображения. Возможно, вам захочется уменьшить ваш запуск JavaScript до небольшого количества, которое вам не нужно обновлять. –

Смежные вопросы