web-dev-qa-db-fra.com

Comment puis-je vider le cache d'un IOS Web App sur l'écran d'accueil?

J'utilise JQTouch pour créer une application Web sur l'écran d'accueil en utilisant la balise méta "compatible Apple-mobile-web-app", mais peu importe le nombre de fois que j'efface le cache dans les paramètres, le code Javascript de l'application Web est toujours un ancien en cache. version.

Curieusement, si je mets le contenu de la balise méta à;

<meta name="Apple-mobile-web-app-capable" content="no" />

... puis ajoutez l'application Web à l'écran d'accueil, je reçois la dernière version lorsque je la lance.

Pourtant, si je mets la balise méta à; 

<meta name="Apple-mobile-web-app-capable" content="yes" />

... puis ajoutez l'application Web à l'écran d'accueil, je récupère l'ancienne version en cache.

PS. Je peux confirmer que c'est seulement le javascript qui ne sera pas actualisé.

26
GilbertSinnott

Vous pouvez essayer d'ajouter une chaîne unique à la fin de l'attribut src de votre inclusion js (utilisez un horodatage, par exemple). N'oubliez pas que vous devrez modifier cette chaîne unique pour chaque actualisation que vous souhaitez effectuer. Par conséquent, vous pouvez envisager de procéder au chargement paresseux (ce qui peut en soi résoudre votre problème): <script type="text/javascript" src="myScript.js?012345"></script>

Cela force généralement le navigateur à récupérer la dernière version du script. Pourrait fonctionner...

20
SquareFeet

J'ai constaté que l'utilisation de la fonctionnalité bundling dans ASP.NET MVC résolvait ce problème pour moi.

Il génère automatiquement un lien groupé de la forme:

http://www.domain.com/MvcBM_time/bundles/AllMyScripts?v=r0sLDicvP58AIXN_mc3QdyVvVj5euZNzdsa2N1PKvb81

Le jeton après v = change si un fichier de l'ensemble est modifié, garantissant que les demandes du navigateur pour l'ensemble obtiendront le dernier ensemble.

1
muzzamo

Cela m'a rendu absolument fou. J'ai essayé de tuer Safari, d'effacer le cache, de passer en mode privé et de supprimer l'application Web de l'écran d'accueil. Cela ne fonctionne pas, mais ce qui fonctionne est charger temporairement la page de l'application Web dans Safari et le recharger}.

Si vous utilisez add to home screen , vous pouvez ajouter? Web_app_ready = 1 à l'URL d'installation. Étant donné qu'il ne s'agit pas d'une procédure d'utilisateur final, l'ajout d'une chaîne de requête à chaque script (la réponse ci-dessus) sera probablement plus efficace pour les environnements non-développeurs.

0
Chris

Si vous êtes jailbreaké, faites ceci dans le terminal 

rm ./Library/Caches/com.Apple.webapp/Cache.db
0
Dmitry Grinberg

C’est un moyen qui a fonctionné pour moi de vider le cache complètement:

1-Supprimer les onglets dans safari où il y a votre application.
2-Supprimer l'icône de l'application dans l'écran d'accueil.
3 - Kill safari de la mémoire.
4-Allez dans settings/safari et appuyez sur clear cache.
5-Vous pouvez redémarrer votre iPhone/iPod si vous voulez être sûr qu'il fonctionne

0
Mageek

En se basant sur ce que SquareFeet a dit, on pourrait automatiquement extraire le nouveau fichier à chaque fois avec une balise GET unique ajoutée au nom du fichier, en utilisant PHP. Par exemple:

<link rel="stylesheet" type="text/css" href="/css/global.css?
   <?php echo(mt_Rand(10000000, 99999999)); ?>
" />

Théoriquement, la même tâche pourrait être accomplie en utilisant JavaScript, avec quelques modifications au serveur Web:

<link rel="stylesheet" type="text/css" href="/css/global.css?
   <div id="id"></div>
" />

<script language="Javascript" type="text/javascript">
   document.getElementById("id").innerHTML = Math.floor((Math.random() * 10000) + 1);
</script>
0
SnazzyJava