2010-03-10 5 views
0

ContexteComment partager le magasin NSURLCache de Safari?

  • Je construis une application qui relie ces dernières pages Web que vous avez visité ensemble.

  • Pour ce faire, j'ai besoin d'obtenir le code HTML pour les URL récentes utilisant Cocoa. En ce moment, j'utilise un WebView invisible pour ce faire. Si je comprends bien, si l'URL n'est pas dans le cache de mon application, il s'agit de pour les serveurs Web.

Ce que je veux

Les chances sont élevées que l'URL que je suis preneuse a déjà été mis en cache par Safari comme la page a déjà été visité.

Je souhaite que mon application vérifie d'abord le cache de Safari pour l'URL. Si c'est là, il devrait simplement utiliser ces données. Sinon, il devrait frapper le serveur web et stocker la page dans le cache de mon application.

Je ne veux pas vraiment avoir à analyser le fichier cache.db de Safari en utilisant sqlite3 - Je ne sais pas si ce format restera le même. Je suis après quelque chose de plus simple et de plus haut niveau.

Ce que j'ai essayé

Je sais que vous pouvez configurer votre propre NSURLCache en utilisant la méthode initWithMemoryCapacity:diskCapacity:diskPath: mais je ne veux pas essayer de l'avoir signalé dans le cache Safari dans le cas où il Fout Safari écrire à elle.

Existe-t-il un moyen simple et efficace de partager le cache Safari?

MISE À JOUR

Aha. Je viens de me rendre compte qu'il y a peut-être un moyen de faire cela.

je pourrais faire une nouvelle instance de NSURLCache avec initWithMemoryCapacity:diskCapacity:diskPath:, pointez le cache Safari, puis spécifiez une politique de cache de NSURLRequestReturnCacheDataDontLoad pour la demande d'URL lors du chargement de la page.

Lorsque cela échoue, je pourrais simplement essayer de charger la page comme d'habitude. Je vais essayer et mettre à jour la question quand j'en sais plus.

Répondre

1

Pour être honnête, vous ne pouvez pas faire cela.

Tout d'abord, je suis assez certain que -[NSURLCache initWithMemoryCapacity:diskCapacity:diskPath:] ne fonctionnera pas comme prévu. Il va à la place souffler l'ancien fichier de cache pour créer le sien; Safari potentiellement très perturbant.

Deuxièmement, NSURLCache est un cache composite. En d'autres termes, il met en cache les données en premier dans la mémoire, puis les déplace sur le disque à un moment donné.Donc, même si vous pouviez accéder correctement au fichier cache de Safari (ce que vous ne pouvez pas faire), vous ne pourriez accéder qu'aux anciennes données en cache; pas le plus récent.

+0

Soupir. Je ne l'ai pas encore essayé, mais je suis à peu près certain que tu as raison. Cela aurait un sens complet. –

+0

Une alternative est que Safari enregistre des copies des pages visitées dans l'historique afin que Spotlight puisse les rechercher. Pouvez-vous retirer ce dont vous avez besoin de cette façon? –

Questions connexes