iOS 缓存 UIWebView

标签 ios objective-c html caching

我编写了一个 iOS 应用程序,可在 UIWebView 内加载 HTML5 Web 应用程序。我试图让应用缓存 UIWebView 中的所有内容以便在 3G 连接时使用,而不是再次加载全部内容。

它需要在 WiFi 连接时跟踪所有链接并下载所有页面和图像。当使用 3G 连接时,它应该从缓存中加载所有内容。

这可能吗?我应该从哪里开始有什么想法吗?我是否需要让 HTML5 应用程序在后台加载所有页面,而不是让应用程序执行此操作?

感谢您的帮助!

最佳答案

首先,我将使用 Reachability 来检测是否有 WIFI 连接以及您的服务器是否可访问。这样您就可以以相同的方式处理 3G 连接和无互联网连接。 (访问缓存的页面)。这也意味着如果您有 WIFI 但仍然无法访问您的服务器,您可以使用缓存。

Reachability sample code

我会下载您的网页和所有相关 Assets 的 zip 文件(如果它是一个相当静态的网站),然后解压缩并将它们存储在本地文件系统中。然后,当没有 WIFI 时,您可以将 UIWebView 指向本地目录。

您可以使用 Zip Archive 之类的工具来处理此问题

ZipArchive GitHub page

如果这不是一个选项,那么当您将页面加载到 UIWebView 中时,您可以从该页面获取 HTML。这样做的问题是您依赖用户访问页面来缓存它们。

您可以使用它来获取 HTML 代码并将其存储在本地:

 // Determile cache file path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0],@"index.html"];   

// Download and write to file
NSURL *url = [NSURL URLWithString:@"http://www.google.co.uk"];
NSData *urlData = [NSData dataWithContentsOfURL:url];
[urlData writeToFile:filePath atomically:YES];

// Load file in UIWebView
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];

您也可以使用此代码在后台获取所有网页。为此,您需要对所有必需的 URL 进行硬编码并单独查找它们,或者最好还是先从您的网站下载网页列表。

您可以创建一个 Web 服务(JSON 可能是您的最佳选择),提供要下载的 URL 列表。然后,您可以解析此 JSON 并使用 URL 将其输入到上面的代码中并在本地缓存 HTML。

请记住,要小心您的超链接以及指向 HTML 中任何图像和 CSS 的链接,因为如果他们正在查找您的完整在线 URL 而不是相对路径,这会破坏您的缓存网站。

关于iOS 缓存 UIWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609635/

相关文章:

ios - UIlabel 中的下划线文本

iphone - 当iPhone/iPad的设备方向改变时,如何处理UI组件?

ios - 从 App-delegate 重新加载或运行函数

ios - (Cocoa 错误 3840。)“(字符 0 周围的值无效。)AFNetworking

asp.net - 什么 HTML 容器用于 ASP 表单而不是 HTML 表

Javascript Css Tooltip who to Fix position 当页面结束时

javascript - Bootstrap 响应在包含 Viewport meta 后不起作用

iphone - iOS : Refresh application from internet

ios - 解析查询最近的对象 whereKey ("pageNumber", equalTo : number)

objective-c - NSTreeController/NSOutlineView失去选择