Как открыть общий доступ к хранилищу Safari NSURLCache? - PullRequest
0 голосов
/ 10 марта 2010

Фон

  • Я создаю приложение, которое связывает последние веб-страницы, которые вы посетили вместе.

  • Для этого мне нужно получить HTML для последних URL-адресов с использованием какао.

  • Прямо сейчас я использую невидимку WebView, чтобы сделать это.

  • Как я понимаю, если URL не в кеше для моего приложения, это посещение веб-серверов.

Что я хочу

Высока вероятность того, что захватываемый мной URL-адрес уже был кэширован Safari, поскольку страница уже посещена.

Я хочу, чтобы мое приложение сначала проверило кеш Safari на наличие URL. Если он там, он должен просто использовать эти данные. Если нет, он должен попасть на веб-сервер и сохранить страницу в кеше моего приложения.

Я действительно не хочу анализировать файл cache.db из Safari с использованием sqlite3 - я не знаю, останется ли этот формат прежним. Я за чем-то более простым и более высоким уровнем.

Что я пробовал

Я знаю, что вы можете настроить свой собственный NSURLCache, используя метод initWithMemoryCapacity:diskCapacity:diskPath:, но я не хочу пытаться указывать это на кэш Safari в случае, если он испортит Safari, записав в него.

Существует ли простой и высокоуровневый способ совместного использования кэша Safari?

UPDATE

Aha. Я только что понял, что может быть способ сделать это, которого мне не хватает.

Я мог бы создать новый экземпляр NSURLCache с initWithMemoryCapacity:diskCapacity:diskPath:, указать его на кэш Safari, а затем указать политику кэширования NSURLRequestReturnCacheDataDontLoad для запроса URL при загрузке страницы.

Когда это не удается, я могу просто попытаться загрузить страницу как обычно. Я попробую это и обновлю вопрос, когда узнаю больше.

1 Ответ

1 голос
/ 10 марта 2010

Если честно, вы просто не можете этого сделать.

Во-первых, я почти уверен, -[NSURLCache initWithMemoryCapacity:diskCapacity:diskPath:] не будет работать так, как вы ожидаете. Вместо этого он уничтожит старый файл кэша, чтобы создать свой собственный; потенциально сильно огорчает Safari.

Во-вторых NSURLCache - это составной кэш. То есть сначала он кэширует данные в памяти, а затем в какой-то момент перемещает их на диск. Таким образом, даже если вы сможете правильно получить доступ к кеш-файлу Safari (чего у вас нет), вы сможете получить доступ только к более старым кешированным данным; не самый последний.

...