代码之家  ›  专栏  ›  技术社区  ›  John Gallagher

如何共享Safari的nsurlcache存储?

  •  0
  • John Gallagher  · 技术社区  · 14 年前

    背景

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

    • 为此,我需要获取html 对于最近使用cocoa的url。

    • 现在,我在用一个隐形的 webview来做这个。

    • 据我所知,如果url不是 在我的应用程序的缓存中,这是 正在访问Web服务器。

    我想要什么

    我抓取的url很可能已经被safari缓存了,因为页面已经被访问过了。

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

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

    我试过的

    我知道你可以用这个方法建立自己的nsurlcache initWithMemoryCapacity:diskCapacity:diskPath: 但我不想试着把这个指向safari缓存,以防它通过写入safari而搞砸safari。

    有没有一种简单、高级的共享Safari缓存的方法?

    更新

    啊哈。我刚刚意识到也许有一种方法可以做到这一点,我已经错过了。

    我可以做一个新的例子 NSURLCache 具有 initWithMemoryCapacity:磁盘容量:磁盘路径: ,将其指向safari缓存,然后指定 NSURLRequestReturnCacheDataDontLoad 用于加载页面时的URL请求。

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   Mike Abdullah    14 年前

    老实说,你不能这么做。

    首先,我很确定 -[NSURLCache initWithMemoryCapacity:diskCapacity:diskPath:] 不会像你期望的那样工作。相反,它会吹走旧的缓存文件来创建自己的缓存文件;这可能会让safari非常不安。

    其次 NSURLCache 是一个 混合成的 隐藏物。也就是说,它首先将数据缓存在内存中,然后在某个时刻将其移到磁盘上。因此,即使您可以正确地访问safari的缓存文件(您不能),您也只能访问较旧的缓存数据,而不能访问最新的缓存数据。