0

背景

  • 我正在构建一个将您最近访问过的网页链接在一起的应用程序。

  • 为此,我需要使用 Cocoa 获取最近 URL 的 HTML。

  • 现在,我正在使用不可见的 WebView 来执行此操作。

  • 据我了解,如果 URL 不在我的应用程序的缓存中,那么这就是在访问 Web 服务器。

我想要的是

我抓取的 URL 很有可能已经被 Safari 缓存,因为该页面已经被访问过。

我希望我的应用程序首先检查 Safari 的缓存中的 URL。如果它在那里,它应该只使用这些数据。如果没有,它应该访问 Web 服务器并将页面存储在我的应用程序的缓存中。

我真的不想使用 sqlite3 从 Safari 解析 cache.db 文件——我不知道这种格式是否会保持不变。我追求更简单、更高层次的东西。

我试过的

我知道您可以使用该方法设置自己的 NSURLCache ,initWithMemoryCapacity:diskCapacity:diskPath:但我不想尝试将其指向 Safari 缓存,以防它通过写入来破坏 Safari。

是否有一种简单、高级的方式来共享 Safari 缓存?

更新

啊哈。我刚刚意识到可能有一种方法可以做到这一点,我一直在想念。

我可以创建一个NSURLCachewith的新实例,将其initWithMemoryCapacity:diskCapacity:diskPath:指向 Safari 缓存,然后NSURLRequestReturnCacheDataDontLoad在加载页面时为 URL 请求指定缓存策略。

当这失败时,我可以尝试正常加载页面。当我知道更多时,我会尝试这个并更新问题。

4

1 回答 1

1

老实说,你不能这样做。

首先,我很确定-[NSURLCache initWithMemoryCapacity:diskCapacity:diskPath:]不会像您期望的那样工作。相反,它会清除旧的缓存文件以创建自己的缓存文件;可能非常令人不安的 Safari。

其次NSURLCache复合缓存。也就是说,它首先将数据缓存在内存中,然后在某个时间点将其移出磁盘。因此,即使您可以正确访问 Safari 的缓存文件(您不能),您也只能访问较旧的缓存数据;不是最新的。

于 2010-03-10T14:25:52.527 回答