SORU
11 Kasım 2009, ÇARŞAMBA


Nasıl düzgün HTML5 bir Önbellek çevrimiçi/çevrimdışı web uygulamaları için Bildirim geçersiz kılmak için?

Şu anda bir Önbellek Bildirimi here açıklandığı gibi) kullanıyorum. Bu etkin kullanıcı çevrimdışıyken uygulamayı çalıştırmak için gerekli kaynaklar kullanılabilir hale getirir.

Ne yazık ki, çok iyi çalışıyor.

Cache manifest sonra kaynakları açıkça önbellek başvurulan tüm tezahür yüklü, Firefox 3.5 önbelleğe alır. Sunucuda bir dosya güncellenir ve kullanıcı zorla ferahlatıcı çalışırsa ancak sayfa online ise (- bildirim önbellek kendisi de dahil olmak üzere), Firefox kesinlikle bir şey almak için reddeder. Uygulama tamamen önbelleğe son noktada donmuş olarak kalır. Soru:

  1. Firefox etkin ağ bağlantısı başarısız olduğunda, önbelleğe alınan kaynak güvenmek istiyorum. Geri DÖNÜŞ bloğu kullanarak, ama boşuna denedim. Bu mümkün olabilir mi?
  2. Eğer #1 mümkün değil, mümkün için Kullanıcı zorlamak-yenileme sayfası ve bypass bu önbellek (ctrl-F5 inmedi de öyle takas tarayıcı önbelleğini, oldukça kısa sürede temizleyerek kendi özel veri? Alternatif olarak, önbellek-bildirim mekanizması son kullanma başlıklarını destek ve saygılı bir davranış olduğu için mi bu her yerde belgelenmiş?

CEVAP
11 Kasım 2009, ÇARŞAMBA


Sanırım bende bunu anladım: eğer bir hata bir cache-manifest (ki, başvurulan bir dosya yok), sonra Firefox tamamen durduracak işleme applicationCache ilgili bir şey. Anlam, önbellek, önbelleğe dahil her şeyi önbellek-bildirim güncelleme olmayacak.

Bu sorunu olduğunu ortaya çıkarmak için, 3 ** (önbelleğe alınmamış) yeni bir HTML dosyası içine düştü uygulamam. Son mesaj vardı önbellek-bildirim, ve emin yeterli (eksik bir dosya) bir sorun olabileceğini belirtti açmış.


// Convenience array of status values
var cacheStatusValues = [];
 cacheStatusValues[0] = 'uncached';
 cacheStatusValues[1] = 'idle';
 cacheStatusValues[2] = 'checking';
 cacheStatusValues[3] = 'downloading';
 cacheStatusValues[4] = 'updateready';
 cacheStatusValues[5] = 'obsolete';

 // Listeners for all possible events
 var cache = window.applicationCache;
 cache.addEventListener('cached', logEvent, false);
 cache.addEventListener('checking', logEvent, false);
 cache.addEventListener('downloading', logEvent, false);
 cache.addEventListener('error', logEvent, false);
 cache.addEventListener('noupdate', logEvent, false);
 cache.addEventListener('obsolete', logEvent, false);
 cache.addEventListener('progress', logEvent, false);
 cache.addEventListener('updateready', logEvent, false);

 // Log every event to the console
 function logEvent(e) {
     var online, status, type, message;
     online = (isOnline()) ? 'yes' : 'no';
     status = cacheStatusValues[cache.status];
     type = e.type;
     message = 'online: '   online;
     message = ', event: '   type;
     message = ', status: '   status;
     if (type == 'error' && navigator.onLine) {
         message = ' There was an unknown error, check your Cache Manifest.';
     }
     log('
' message); } function log(s) { alert(s); } function isOnline() { return navigator.onLine; } if (!$('html').attr('manifest')) { log('No Cache Manifest listed on the tag.') } // Swap in newly download files when update is ready cache.addEventListener('updateready', function(e){ // Don't perform "swap" if this is the first cache if (cacheStatusValues[cache.status] != 'idle') { cache.swapCache(); log('Swapped/updated the Cache Manifest.'); } } , false); // These two functions check for updates to the manifest file function checkForUpdates(){ cache.update(); } function autoCheckForUpdates(){ setInterval(function(){cache.update()}, 10000); } return { isOnline: isOnline, checkForUpdates: checkForUpdates, autoCheckForUpdates: autoCheckForUpdates }

Bu kesinlikle yardımcı oldu, ama kesinlikle hatalı önbellek-tezahür yazdıran Mozilla gelen bir özellik talep etmeliyim en azından Hata Konsolu. Özel kod bu olaylara bir sorunu yeniden bir dosya olarak önemsiz teşhis eklemek için gerekli olmamalı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • fast2hell

    fast2hell

    16 AĞUSTOS 2006
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • rekjavicxxx

    rekjavicxxx

    28 EKİM 2007