Как поделиться магазином NSURLCache в Safari?

Фон

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

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

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

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

Что я хочу

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

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

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

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

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

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

ОБНОВЛЕНИЕ

Ага. Я только что понял, что может быть способ сделать это, который я пропустил.

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

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


person John Gallagher    schedule 10.03.2010    source источник


Ответы (1)


Честно говоря, вы просто не можете этого сделать.

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

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

person Mike Abdullah    schedule 10.03.2010
comment
Вздох. Я еще не пробовал, но я уверен, что вы правы. Это имело бы полный смысл. - person John Gallagher; 10.03.2010
comment
Альтернативой является то, что Safari сохраняет копии посещенных страниц в истории, чтобы Spotlight мог их искать. Можете ли вы вытащить то, что вам нужно, таким образом? - person Mike Abdullah; 11.03.2010