Html5 manifeste de cache dans une UIWebView?
J'aimerais être en mesure d'utiliser le html5 manifeste de cache pour stocker les images en local sur un iPhone qui est en visitant la page via un UIWebView
dans une application.
J'ai mis en place un exemple qui je pense est conforme aux spécifications, et semble fonctionner dans safari 4 et mobile safari, mais pas dans mon application UIWebView
.
L'exemple de html est mis en place à http://bynomial.com/html5/clock3.html
.
Ceci est très similaire à l'exemple fourni dans le HTML5 projet de norme
.
Ici est l'ensemble (non du modèle) code de l'exemple d'application que j'utilise pour les tests:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
//I thought this might help - I don't see any difference, though.
NSURLCache* cache = [NSURLCache sharedURLCache];
[cache setDiskCapacity:512*1024];
CGRect frame = [[UIScreen mainScreen] applicationFrame];
UIWebView* webView = [[UIWebView alloc] initWithFrame:frame];
[window addSubview:webView];
NSString* urlString = @"http://bynomial.com/html5/clock3.html";
NSURL* url = [NSURL URLWithString:urlString];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
[window makeKeyAndVisible];
}
J'ai passé en revue quelques questions sur stackoverflow, mais ils ne semblent pas fournir de l'information pour les résoudre. Par exemple, je suis sûr que les fichiers que je suis en train de cache ne sont pas trop grands, car ils sont juste un couple de petits fichiers texte (moyen < 25).
Toutes les idées pour savoir comment obtenir que cela fonctionne?
- Tyler, La réponse que vous avez choisi n'est plus pertinente. Vous devez mettre à jour votre choix à @iPixFolio de répondre si vous le pouvez.
- Va travailler iOS7 et 6. Pourquoi ne pas travailler en ios8?
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce travail à l'aide d'un .fichier de manifeste dans une UIWebView. J'ai découvert le truc sur les forums des développeurs Apple.
vous devez fournir le bon type mime du fichier manifeste: elle doit être de type "text/cache-manifest" - si c'est autre chose, alors vous n'obtiendrez pas vos fichiers mis en cache.
vous pouvez utiliser le web sniffer à http://web-sniffer.net/ à regarder les en-têtes retournées par le serveur.
si vous êtes en utilisant .htaccess sur votre serveur web, puis ajoutez la ligne suivante à la .htaccess:
assurez-vous de désactiver le cache de votre navigateur après avoir fait cette modification pour voir l'effet.
HTH
Marque
edit: c'est uniquement pris en charge sur iOS 4.0 et versions ultérieures. Vous aurez besoin de mettre en place votre propre mécanisme de mise en cache pour iOS 2.x et 3.x 🙁
curl -I http://YOUR_DOMAIN/PATH/TO/CACHE_MANIFEST
Vous pouvez utiliser le cachePolicy param sur le NSURLRequest.
documenté ici.
UIWebView
's ne peuvent pas (ou ne sera pas) utiliser le HTML5 appcache. Ils n'ont tout simplement pas. Peut-être dans l'iPhone OS 4.0.Mais ce que vous pouvez faire est de récupérer tous les fichiers vous-même avec les appels de réseau (ou tout simplement dans votre application bundle) et de la charge de la webview avec une URL pointant vers votre fichier HTML local, ce qui peut avoir des Url relatives aux actifs locaux.
Il n'est pas super simple "ça marche" façon de faire cela, cependant.
Avez-vous essayé de créer un personnalisé NSURLCache objet et utiliser le setSharedURLCache: méthode, comme recommandé dans la documentation:
"Des Applications avec des besoins plus précis peut créer un personnalisé NSURLCache objet et de le définir comme la mémoire cache partagée de l'instance à l'aide de setSharedURLCache:"
Que je rencontrais le même problème. Bien que j'ai utilisé:
Il n'a pas l'air de vouloir utiliser les données mises en cache. Le sens qu'il a constamment fait la demande à mon webservice pour récupérer le contenu le plus récent et donc la mise en cache inutiles.
J'ai trouvé un travail autour de. Lors du chargement de l'URL dans la UIWebView utiliser le code suivant:
Cela a été testé sur les OS 4.2, depuis que j'utilise le manifeste pour gérer la mise en cache (HTML5). Il ya une grande chance que cela ne fonctionne pas sur OS 2.x/3.x, tu cela doit être confirmé.
Les inconvénients de l'utilisation de cette méthode est que vous ne pouvez pas envoyer de données POST avec votre demande.
Espère que cela aide quelqu'un.
Vous avez encore besoin d'envoyer la demande avec 'cachePolicy:NSURLRequestReturnCacheDataElseLoad' d'autre, il ne sera toujours pas de travail.