我如何共享Safari的NSURLCache商店?

时间:2010-03-10 12:46:16

标签: cocoa safari webview nsurlrequest nsurlcache

背景

  • 我正在构建一个链接最近的应用 你一起去过的网页。

  • 要做到这一点,我需要获取HTML 最近使用Cocoa的网址。

  • 现在,我正在使用隐形 WebView要做到这一点。

  • 据我了解,如果不是 在我的应用程序的缓存中,这是 点击网络服务器。

我想要什么

由于页面已经被访问过,我抓取的URL已经被Safari缓存的可能性很高。

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

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

我尝试了什么

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

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

更新

啊哈。我刚刚意识到可能有一种方法可以解决这个问题。

我可以使用NSURLCache创建initWithMemoryCapacity:diskCapacity:diskPath:的新实例,将其指向Safari缓存,然后在加载页面时为URL请求指定NSURLRequestReturnCacheDataDontLoad的缓存策略。< / p>

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

1 个答案:

答案 0 :(得分:1)

老实说,你不能这样做。

首先,我很确定-[NSURLCache initWithMemoryCapacity:diskCapacity:diskPath:]无法按预期工作。它将吹掉旧的缓存文件来创建自己的缓存文件;可能会让Safari感到非常不安。

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