gpt4 book ai didi

iOS 缓存一个 UIWebView

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:08:59 27 4
gpt4 key购买 nike

我编写了一个 iOS 应用程序,它在 UIWebView 中加载一个 HTML5 网络应用程序。我正在尝试让应用程序缓存 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com