【问题标题】:UIWebView webpage caching for offline viewingUIWebView 网页缓存以供离线查看
【发布时间】:2013-05-25 11:26:30
【问题描述】:

首先,我很确定我已经检查了这里的每一个答案,没有做我想做的事情。

  1. 在这个问题中,给出的答案是 ASIHTTPRequest,它是死项目。 (How do I download an entire webpage (with images) on the iPhone?)
  2. 在这个问题中,用户提出了 RNCachingURLProtocol,这确实很棒,但是在完全关闭应用程序(在任务栏中关闭它)后我遇到了一些问题。之后我没有得到 css 或图像,只加载了 html。 (Cache a single webpage for use when offline in Xcode / UIWEBVIEW)。

还有几个答案,但没有一个是好的。我正在搜索的内容必须有一些简单的实现。

我想:当应用程序打开时,它会加载一些网页。我想完全保存该网页。现在用户可以退出或做任何他想做的事(只是不卸载)。只要有一些互联网连接(我使用可达性类检查),网页就会正常加载并被保存。如果用户打开应用程序并且没有互联网连接,我只想显示“它可能不是最新的 bla bla boa”的消息,并显示上次应用程序有互联网连接时保存的完整、保存的网页。

保存完整网页的最佳方式(最新)是什么。我发现了一些关于 MKNetworkKit 的东西,但我不知道如何使用它。任何帮助将不胜感激。

【问题讨论】:

  • 我正在应用程序中测试这些方法,我会让你知道什么最有效。干杯。
  • 嗨,我有同样的任务。您找到问题的解决方案了吗?
  • @AlekseyTsyss,不是真的。我认为现在不可能缓存所有内容。也许同时出现了一些解决方案......
  • 如果有人还在寻找解决方案,我找到了一种使用 WKWebView stackoverflow.com/a/53251725/4248897 离线存储完整页面的方法

标签: ios objective-c uiwebview nsurlrequest


【解决方案1】:
NSString *stringurl=[NSString stringWithFormat:@"http://www.google.com"];
NSURL *url=[NSURL URLWithString:stringurl];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:15.0];
[uiwebview loadRequest:theRequest];

URL 加载系统提供对请求的响应的复合磁盘和内存缓存。此缓存允许应用程序减少对网络连接的依赖并提高其性能。

【讨论】:

  • 注意:目前只缓存对 HTTP 和 HTTPS 请求的响应。 FTP 和文件协议尝试访问缓存策略允许的原始源。自定义 NSURLProtocol 类可以选择提供缓存。
  • 这是我目前正在做的,但遇到了网站的javascript文件没有被缓存的问题......是否可以缓存js文件以及字符串url?跨度>
  • 我的理解是uiwebview缓存了url和它的相关文件。如果你想离线加载一个js文件你必须下载它并设置文件位置。通常web view在使用上面时会缓存内容方法。
  • 谢谢。任何人都知道可以缓存多少数据,我可以缓存 100 个 url,每个页面可能有不同的大小。
  • 请阅读此文档nshipster.com/nsurlcache。它可能会帮助您获得更多信息。
【解决方案2】:

听起来标准缓存还不够好,因为您无法控制缓存的内容和缓存时间。解决这个问题的最简单方法是通过覆盖 NSURLCache 创建自己的缓存机制。您可以在 http://nshipster.com/nsurlcache/ 找到一些相关文档,在 http://github.com/evermeer/EVURLCache 找到示例。该示例甚至允许您使用可包含在应用安装中的预填充缓存。

【讨论】:

  • EVURLCache 现已更新为支持 ARC 的新版本的可达性类
  • 我已经通过 pod 安装了“EVURLCache”。在一个工作正常的空白项目上进行了测试,但在现有项目上它没有记录任何内容。我猜不工作。你能帮帮我吗??
  • @sairam 那是因为 WKWebview 也不使用 NSURLRequest。如果你想在那里兑现,那么你必须切换到 UIWebView
  • 是的,但 UIWebview 在 iOS12.0 中已弃用。对我来说,您的框架正在运行 iOS 12.0 中也失败了。请让我知道我们是否可以在这方面做些什么来让它发挥作用。
  • @sairam 你仍然可以在 iOS12 上使用 UIWebView。 NSURLCache(因此还有 EVURLCache)应该仍然可以在 iOS 12 上工作。它永远不会与 WKWebview 一起工作,因为苹果改变了那里的整个技术。我还没有看到任何替代方案。
猜你喜欢
  • 2012-12-07
  • 2016-06-07
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
相关资源
最近更新 更多