背景

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

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

  • 现在,我正在使用一个隐形的WebView来执行此操作。

  • 据我了解,如果 URL 不是 在我的应用的缓存中,这是 击中 Web 服务器。

我想要的是

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

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

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

我尝试过的

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

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

更新

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

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

当失败时,我可以尝试正常加载页面。我会尝试一下,并在了解更多信息后更新问题。

有帮助吗?

解决方案

老实说,你就是做不到这一点。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top