iOScaching一个UIWebView

我写了一个iOS应用程序,在UIWebView中加载一个HTML5 Web应用程序。 我试图使应用程序cacheUIWebView中的所有使用3G连接,而不是再次加载。

它需要遵循WiFi连接上的所有链接,并下载所有页面和图像。 当在3G连接上时,它应该从caching中加载所有的东西。

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

谢谢你的帮助!

首先,我会使用Reachability来检测是否有WIFI连接,并且您的服务器是可访问的。 这样你就可以同时处理3G连接和没有互联网连接。 (访问caching的页面)。 这也意味着你可以使用caching,如果你有WIFI,但仍然无法到达你的服务器。

可达性示例代码

我要么下载你的网页和所有相关的资产(如果它是一个相当静态的网站)的zip文件,并将其解压缩并存储在本地文件系统中。 当没有WIFI的时候,你可以把你的UIWebView指向本地目录。

你可以使用Zip Archive来处理这个问题

ZipArchive GitHub页面

如果这不是一个选项,那么当你在UIWebView中加载时,你可以从页面获得HTML。 这样做的问题是你依赖用户访问页面来caching它们。

您可以使用它来获取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,并单独查找或更好地从您的网站首先下载网页列表。

你可以创build一个Web服务(JSON可能是你最好的select),给出一个url列表下载。 然后,您可以通过这个JSONparsing,并使用URL来提供上面的代码,并在本地cachingHTML。

只要记住要小心超链接和链接到您的HTML中的任何图像和CSS,因为如果他们正在寻找完整的在线URL而不是相对path,这将打破你的caching网站。