背景
我正在构建一个链接最近的应用 你一起去过的网页。
要做到这一点,我需要获取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>
如果失败,我可以尝试正常加载页面。当我知道更多时,我会尝试这个并更新问题。
答案 0 :(得分:1)
老实说,你不能这样做。
首先,我很确定-[NSURLCache initWithMemoryCapacity:diskCapacity:diskPath:]
无法按预期工作。它将吹掉旧的缓存文件来创建自己的缓存文件;可能会让Safari感到非常不安。
其次NSURLCache
是复合缓存。也就是说,它首先将数据缓存在内存中,然后在某个时刻将其移出到磁盘。因此,即使您可以正确访问Safari的缓存文件(您不能),您也只能访问较旧的缓存数据;不是最近的。