Force applicationCache pour recharger les fichiers mis en cache
Je suis en utilisant le HTML5 applicationCache de stocker de nombreuses Javascript, CSS, images, etc. les fichiers d'une page. Si je mettre à jour un de ces fichiers, le navigateur ne jamais le recharge. J'ai essayé ce qui suit:
- Appel applicationCache.mise à jour() au chargement de la page
- Écoute pour applicationCache de updateready de l'événement, et en appelant swapCache() et de la fenêtre.emplacement.reload()
- Ajouter un timestamp commentaire pour le fichier de manifeste de lui-même, pour forcer le navigateur à réaliser le manifeste a changé
Assurément, ce ne peut pas être aussi fort. Comment puis-je convaincre le navigateur de re-demande de certains fichiers mis en cache?
À des fins de débogage, vous pouvez ouvrir l'inspecteur web, allez à l'onglet Application, cliquez sur Effacer le Stockage en vertu de l'Application de la section, puis cliquez sur "Effacer les données du site'. Ensuite, vous pouvez actualiser la page comme c'est une ardoise propre. - Je l'utiliser sur Chrome, vous ne savez pas sur les autres navigateurs.
OriginalL'auteur Ben Dilts | 2011-02-22
Vous devez vous connecter pour publier un commentaire.
À force de tout nouveaux ou modifiés fichier à télécharger, vous devez mettre à jour le fichier manifeste (ajouter un numéro de version commentaire ou toute modification fera l'affaire).
Ce qui est probablement ce qui se passe est que vous obtenez un message d'erreur. La plus courante est que vous pourriez ne pas être en train de servir le manifeste avec le bon type mime (
text/cache-manifest
). Avez-vous configuré votre serveur correctement? La meilleure façon de vérifier cela est d'ouvrir la page dans google Chrome, et de regarder dans la console et l'onglet ressources en vertu de l'AppCache pour voir si il y a une erreur (il va se plaindre sur le fichier servi de manière incorrecte. Vous pouvez également tester avec le curl -je commande:Il est également possible que votre fichier manifeste est la mise en cache (vous pouvez définir l'expiration des en-têtes pour qu'il expire rightaway). Aussi garder le rechargement de la séquence à l'esprit: le chargement de la page de AppCache premier (si elle existe), puis le navigateur vérifie si le fichier manifeste est mis à jour. Si elle l'est, le télécharger et le placer dans la nouvelle version de la cache, mais ce ne sera pas automatiquement la mise à jour de la page (ni
swapCache()
), vous devez actualiser la page (au moins) une fois de plus.Voir aussi cette présentation pour plus d'informations sur le sujet.
OriginalL'auteur Peter Lubbers
Avec Google Chrome, si vous êtes en train de faire cela pendant le débogage, il y a une solution simple: utiliser une fenêtre de navigation privée. Lorsque vous changer quelque chose dans votre cache, fermez la fenêtre de navigation privée (si vous avez plus d'un, assurez-vous de fermer toutes), rouvrez-le et allez à votre application. Ce sera désormais le téléchargement de propre, y compris tous vos fichiers modifiés.
C'est un peu une option nucléaire, car il va détruire toutes vos données stockées, mais il fonctionne très bien pour moi pendant le processus de la remise en place de CSS, par exemple.
Pour une raison quelconque, la compensation Chrome du cache de la page avec "Effacer les Données de Navigation" ne semble pas fonctionner.
J'aimerais upvote deux fois !
OriginalL'auteur xgretsch
"vous aurez besoin de modifier le cache le fichier de manifeste d'elle-même. Cela peut être aussi simple que de changer un caractère unique", qui fonctionnent pour moi merci!
Attention: le manifeste est téléchargé avec un timbre de temps, puis les fichiers référencés sont téléchargés, puis le manifeste est téléchargé de NOUVEAU pour vérifier que c'est toujours le même, mais bien sûr avec un nouveau timbre de temps il ne sera plus la même et il en sera de jeter une erreur.
Quelle erreur est levée, et le navigateur récupérer? Semble un peu courte comme le manifeste de mise à jour tandis que les fichiers sont téléchargés va jeter une erreur, un assez grand nombre d'utilisateurs et il est presque inévitable.
OriginalL'auteur chulian
J'ai du mal avec ça pendant un moment. Pour moi, la clé est d'obtenir le type mime et la mise en cache des en-têtes de droit via nginx.
dans /etc/nginx/mime.types:
dans /etc/nginx/nginx.conf:
L'expiration de -1 ligne provoque le cache-tête pour être réglé à no-cache.
Aussi, de vider le cache de Firefox 23, j'ai utilisé:
Et de voir ce qui a été récupéré depuis le serveur ou pas:
OriginalL'auteur user2795195
pour votre fichier de manifeste de définir votre en-tête HTTP pour
ajouter un Type de Contenu .manifeste de
Qui devrait le faire, sinon le navigateur va mettre en cache le manifeste de lui-même pour ce que cache par défaut que vous avez défini, de sorte que les demandes pour vérifier le manifeste allez récupérer une copie mise en cache.
Après que puis changer un caractère dans le fichier de manifeste et de la demande suivante doit récupérer un nouveau manifeste.
Vous ne dites pas quel serveur vous êtes en cours d'exécution, mais je l'ai fait pour les fichiers hébergés d'un compartiment S3 et qui a fait le tour, S3 normalement caches pour 24 heures.
Pragma est éteint le plus tôt spec, doit fonctionner de la même, mais les navigateurs qui vient de soutien qu'il sont vieux et n'ont pas de prise en charge du HTML5. Il devrait y avoir aucune différence que ce soit, j'irais pour le Contrôle du Cache.
J'étais sûr que c'obsolète dans les versions ultérieures de HTML. Comme vous le dites, les anciens navigateurs, même les plus récents pourraient soutenir. Mais vous avez droit à l'aide de HTML5 compatible tout ça pourrait être mieux, même si elle ne fonctionne pas pour la personne. Cela peut être utile: stackoverflow.com/questions/4225486/...
OriginalL'auteur Nico Westerdale