我编写了一个 iOS 应用程序,它HTML5
在UIWebView
. 我正在尝试让应用程序cache
在 3G 连接上使用所有内容,UIWebView
而不是再次加载。
它需要在 WiFi 连接时跟踪所有链接并下载所有页面和图像。当使用 3G 连接时,它应该从缓存中加载所有内容。
这可能吗?关于我应该从哪里开始的任何想法?我是否需要让我的 HTML5 应用程序在后台加载所有页面,而不是让应用程序这样做?
谢谢你的帮助!
我编写了一个 iOS 应用程序,它HTML5
在UIWebView
. 我正在尝试让应用程序cache
在 3G 连接上使用所有内容,UIWebView
而不是再次加载。
它需要在 WiFi 连接时跟踪所有链接并下载所有页面和图像。当使用 3G 连接时,它应该从缓存中加载所有内容。
这可能吗?关于我应该从哪里开始的任何想法?我是否需要让我的 HTML5 应用程序在后台加载所有页面,而不是让应用程序这样做?
谢谢你的帮助!
首先,我会使用 Reachability 来检测是否有 WIFI 连接并且您的服务器是否可以访问。这样,您可以以相同的方式处理 3G 连接和无互联网连接。(访问缓存的页面)。这也意味着如果您有 WIFI 但仍然无法访问您的服务器,您可以使用缓存。
我会下载您的网页和所有相关资产(如果它是一个相当静态的网站)的 zip 文件,然后解压缩并将它们存储在本地文件系统中。然后,当没有 WIFI 时,您可以将 UIWebView 指向本地目录。
你可以使用像 Zip Archive 这样的东西来处理这个
如果这不是一个选项,那么当您在 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 而不是相对路径,这将破坏您的缓存网站。