Comment annuler un HTML5 Manifeste de Cache en ligne/hors-ligne les web-apps?
Je suis actuellement à l'aide d'un Manifeste de Cache (comme décrit ici). Cela rend effectivement les ressources nécessaires pour exécuter l'application disponible lorsque l'utilisateur est hors-ligne.
Malheureusement, il fonctionne un peu trop bien.
Après le manifeste de cache est chargé, Firefox 3.5+ caches de toutes les ressources explicitement mentionnés dans le manifeste de cache. Cependant, si un fichier sur le serveur est mis à jour et l'utilisateur tente de force de l'actualisation de la page en ligne (y compris le cache-manifeste de lui-même), Firefox sera absolument refuser de chercher quoi que ce soit. L'application reste complètement gelé, à ce dernier point, il a été mis en cache. Questions:
- Je veux Firefox de manière efficace uniquement s'appuyer sur les ressources mises en cache lors de la défaillance de la connexion réseau. J'ai essayé d'utiliser le bloc de SECOURS, mais en vain. Est-ce même possible?
- Si #1 n'est pas possible, est-il possible pour l'utilisateur de forcer le rafraîchissement de la page et de contournement de ce cache (ctrl + F5 ne le fait pas et ni ne effacement du cache du navigateur, scandaleusement) courte de la compensation de leurs données privées? Sinon, ne le cache-manifest mécanisme de soutien à l'expiration des en-têtes et de son comportement à l'égard de ce document n'importe où?
- J'ai vu cet exemple, le problème se produit par intermittence. Normalement la mise à jour d'un fichier dans le manifeste et ensuite mettre à jour le numéro de révision sur un commentaire dans le manifeste provoque le fichier mis à jour pour être rechargé, mais de temps en temps Firefox se bloque et refuse de recharger la nouvelle ressource, en dépit rien de mal avec le manifeste. Le seul moyen que j'ai trouvé pour résoudre le problème est de vider le cache hors connexion, mais je ce n'est pas acceptable pour le déploiement des mises à jour.
Vous devez vous connecter pour publier un commentaire.
Je pense que j'ai compris: si il y a une erreur dans l'une de cache-manifest (par exemple, un fichier référencé n'existe pas), alors, Firefox va arrêter le traitement à tout applicationCache liés. Sens, il ne sera pas mise à jour quoi que ce soit dans votre cache, y compris votre cache cache-manifest.
Pour découvrir que c'était le problème, je emprunté du code de Mozilla et a chuté dans une nouvelle (non mis en cache) fichier HTML dans mon application. Le message final connecté a déclaré qu'il pourrait y avoir un problème dans mon cache-manifest, et bien sûr, il y a (manquant de fichier).
C'est certes utile, mais j'devriez certainement demander une fonctionnalité de Mozilla, qui imprime mal formé cache-se manifeste au moins à la Console d'Erreur. Il ne devrait pas demander de code personnalisé à attacher à ces événements afin de diagnostiquer un problème d'aussi insignifiant qu'un fichier renommé.
J'ai utilisé le code de HTML5 Rocks: mise à Jour du cache:
Avertissement: mon expérience avec les manifestes et cache tous les Safari et FF peut gérer certaines choses différemment.
Vous avez tout à fait raison. S'il y a des fichiers figurant sur le manifeste qui ne peut pas être trouvé, pas de mise en cache se produire.
Même si vous êtes en ligne, le navigateur ne vérifier que le fichier manifeste. En attendant que le fichier de manifeste, il va continuer à charger le site de la cache de cette façon, il n'a pas de délai de rendu, mais cela signifie que vous ne voyez pas les modifications sur la première charge.
La prochaine fois que le site est chargé, si le manifeste changé sur le chargement précédent, les nouveaux fichiers seront chargés.
IL EST TOUJOURS NÉCESSAIRE DE RECHARGER deux fois pour voir les modifications. En fait, j'ai parfois eu à le recharger 3 fois pour voir la mise à jour. Aucune idée de pourquoi.
Lors du débogage, je générer mon fichier de manifeste à la volée avec php, donc il n'y a pas de chance de faire une faute de frappe dans le nom du fichier. J'ai aussi générer le numéro de version au hasard à chaque fois pour forcer une mise à jour, mais n'ont toujours hors connexion d'une webapp pour les tests.
Une fois terminé, le fichier php peut juste l'écho de l'enregistrées les données du manifeste avec une constante de numéro de version et le cache sera toujours utilisé.
Juste certaines choses que j'ai appris en jouant avec le manifeste et le cache récemment. Il fonctionne très bien, mais peut être source de confusion.
Il n'y a pas de date d'expiration. Pour uncache, vous devez modifier le fichier de manifeste de ne rien avoir en elle et de faire un rechargement. Sur Safari, l'effacement du cache de l'utilisateur n'efface tous les fichiers mis en cache.
J'ai eu le même problème: une fois Firefox enregistré les fichiers hors connexion, il ne serait pas recharger jamais. Chrome a fonctionné comme prévu, il a vérifié le fichier de manifeste pour les changements et rechargé tout, si le fichier manifeste changé. Firefox n'ai même pas télécharger le fichier manifeste à partir du serveur, de sorte qu'il pourrait ne pas remarquer les changements.
Après enquête, j'ai découvert que Firefox a été mise en cache, le cache de fichier manifeste (à l'ancienne cache, pas le cache hors connexion). Réglage du cache en-tête du fichier manifeste pour
Cache-Control: no-cache, private
résolu le problème.J'ai fait un add-on Firefox qui invalide le Manifeste de Cache et d'effacer le Stockage Local HTML5.
http://sites.google.com/site/keigoattic/home/webrelated#TOC-Firefox-HTML5-Offline-Cache-and-Loc
Vous pouvez également invalider le cache manifest en tapant le code ci-dessous dans la Console d'Erreur:
Ou, en tapant le code ci-dessous dans la barre d'adresse manuellement enforece le cache de mise à jour:
Hmm, je viens d'appeler update() sur le cache, après un modifier modifier le fichier de manifeste, et reçu la totalité de la séquence de contrôle/téléchargement/prêt, en a fait un de rechargement, et un changement de texte que j'avais fait dans un de mes fichiers js, qui apparaît dans la première page de mon application, rapidement apparu.
Semble que j'ai seulement besoin d'une recharge.