web-dev-qa-db-fra.com

Comment forcer une application Web avec un signet sur l'écran d'accueil de l'iPad pour se rafraîchir

J'ai rencontré un problème en ajoutant une application Web à l'écran d'accueil de mon iPad (iOS 5.0.1 iPad 2). Lorsque je l'ouvre, il semble que quelque chose soit mis en cache, indépendamment de Safari. 

J'ai effacé tout ce qui était disponible dans Safari dans les paramètres (Effacer l'historique et Effacer les cookies et les données), et lorsque je navigue vers l'application Web avec Safari, je vois l'application dans son état actuel. Cependant, si j'ouvre le signet de l'écran d'accueil, l'application est déjà modifiée. 

J'ai vu beaucoup d'informations sur l'utilisation d'un cache.manifest pour mettre en cache des ressources pour une utilisation hors connexion, mais je ne suis pas sûr que ce soit pertinent, car je voudrais tout le contraire: ne rien mettre en cache.

Je suis allé au niveau de ne même pas tester les ressources externes; Si je modifie une chaîne de test arbitraire dans l'élément body de mon index.html, le signet de l'écran d'accueil n'affiche pas le texte mis à jour.

24
M Marsh

Je pense avoir trouvé une solution de contournement:

La nouvelle version du site apparaît uniquement lorsque le fichier index.html est modifié.
(le premier fichier à charger)

Si vous laissez le fichier index.html et ne modifiez que quelques js dans d'autres fichiers, le site ne charge pas la nouvelle version.

5
christophe

Une autre solution consiste à ajouter? V = 1 à vos liens Javascript et CSS. Par exemple:

<link rel="stylesheet" type="text/css" media="all" href="./css/ipad.css?v=1">    
<script src="./js/ipad.js?v=1"></script>

Il semble qu'il ne soit pas nécessaire de mettre à jour le numéro lorsque votre fichier a changé, pour autant que je sache. Apparemment, sur un iPad 2 avec la dernière mise à jour logicielle installée, il suffit de faire allusion à quelque chose de dynamique.

24
Hendrik

Créez un cache.manifest qui lui indique de ne jamais mettre en cache les ressources référencées par la page html principale:

CACHE MANIFEST

# Version 1.0000

NETWORK:
*

Utilisez-le dans votre index.html:

<!DOCTYPE html>
<html manifest="cache.manifest">

Maintenant, chaque fois que vous modifiez ce fichier manifeste (par exemple, en augmentant le numéro de version dans ce commentaire), le navigateur retéléchargera aussi index.html également.

Assurez-vous que votre page est rechargée lorsque le cache est mis à jour:

<script>
function updateSite(event) {
    window.location.reload();
}
window.applicationCache.addEventListener('updateready', updateSite, false);
</script>

La bibliothèque de développeurs Safari dispose d’une bonne documentation .

9
Tom

Pour nos applications de clips Web iOS, nous utilisons les éléments suivants. Jusqu'à présent, pas de problèmes de cache:

1- Nous avons un fichier manifeste de cache appelé 'manifest.appcache.php'

<?php
    header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
    header("Pragma: no-cache");
    header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
    header('Content-type: text/cache-manifest'); 
?>

CACHE MANIFEST

CACHE:
# Don't cache anything
FALLBACK:
# Nothing
NETWORK:
# Request everything from server
*

2 - Dans le fichier HTML nous avons:

<!DOCTYPE html>
<html lang="en" manifest="manifest.appcache.php">
    <head>
...
5
Rabi

Vous pouvez forcer le rechargement de l'application Web ouverte sans utiliser le cache si Safari Web Inspector est ouvert et pointe vers votre application Web ouverte. Avec l'inspecteur Web actif, appuyez sur SHIFT + COMMAND + R (sur un Mac). Vous devrez peut-être actualiser une fois de plus pour déclencher les actifs mis à jour.

2
Sarah

Je développe une application angulaire que je développe et je rencontre ce problème lorsque j'essaie de la tester sur un iPad. En ajoutant une requête sans signification à la fin de l'URL, j'ai pu obtenir une version actuelle de tous les actifs. 

www.somesite.com?meaninglessquery

2
Timothy J Blevins

Les derniers outils de développement Safari (v12.0.1) possèdent un bouton "Ignorer le cache de ressources" en haut à droite de l'onglet Réseau. Vérifiez cela, puis rechargez.

0
Chen Lim

J'ai eu de la chance avec la mise hors tension de l'appareil ... J'ai modifié le manifeste de l'application; mais vraisemblablement, vous avez besoin d'une actualisation ou de quelque chose d'autre pour que le navigateur le recherche . Depuis que j'ai supprimé le navigateur Chrome, il n'y a pas de bouton de réinitialisation. Nous avons essayé de "fermer" l'application (haha) et de la supprimer. mais je présume qu'iOS a tendance à garder les choses en cours de toute façon . L'arrêt a fait l'affaire pour le rafraîchir.

Peut-être y a-t-il un geste d'actualisation que je ne sais pas. Peut-être faudrait-il insérer un petit bouton de vérification des mises à jour dans les applications Web en cache. 

0
NathanSmutz