没有缓存的UIWebview

21

我想加载一个没有缓存的webview?

//Create a URL object.
NSURL *url = [NSURL URLWithString:urlAddress];
//URL Request Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//Load the request in the UIWebView.
[kdgWebView loadRequest:requestObj];
4个回答

38

Objective-C:

// Remove and disable all URL Cache, but doesn't seem to affect the memory
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];

您可以在http://blog.techno-barje.fr/post/2010/10/04/UIWebView-secrets-part2-leaks-on-release/上找到更多信息。
Swift:
URLCache.shared.removeAllCachedResponses()
URLCache.shared.diskCapacity = 0
URLCache.shared.memoryCapacity = 0

对我无效?即使我将其放入代码中,缓存数据仍会被加载。 - Jean St John
您可以更改缓存策略。 - LuisEspinoza
非常感谢您的答案。这个解决方案对我很有用,因为我正在使用UIWebView,并且当没有互联网连接时,我不希望缓存页面加载。 - Jason TEPOORTEN
这并不总是有效的。它在大约5次测试后成功了,然后失败了。我认为它没有获取到所有缓存数据。 - Jim True
你如何更改 Web View 的缓存策略? - MarkM
当我的UIWebView指向运行在https://github.com/indexzero/http-server之上的localhost服务器时,这对我最初并没有起作用。当我切换到使用https://nodejs.org/api/http.html时,上面的代码解决了我的缓存问题。我还能够在先前运行`http-server -c-1`的http-server中不使用上述代码打破缓存。教训是:缓存行为不仅基于你的iOS代码,还取决于你的Web服务器。 - Liron Yahdav

15

您可以使用以下代码更改缓存策略:

NSURLRequest *requestObj = [NSURLRequest requestWithURL:url 
                                        cachePolicy:NSURLRequestReloadIgnoringCacheData
                                    timeoutInterval: 10.0]; 

谢谢,我找到了缓存加载的原因...我使用了一个缓存清单,在HTML5中缓存清单存在一个bug。 - Jean St John

0

我在这里尝试回答一个类似的问题。希望对你有用!最后一个解决方案适用于HTML,但不适用于在HTML中链接的图像、CSS和JS。

如何清除UIWebView缓存?


0
我尝试了所有这些解决方案,但没有一个能够每次都有效。我的主要测试是一个包含图像背景的html页面。这个html页面和图像通过我编写的“同步”方法在iPad上本地下载。唯一重置缓存的方法是不断更改html页面中图像的url,以便每次都认为它是唯一的图像。例如,在我的html中:
<body background="image.png?v123">

所以每次我更改页面时,都必须更新版本号:

<body background="image.png?v1234">

等等,你可以按任何方式更改URL,它只需要不同就行。

我已经厌倦了这样做。现在,当我本地下载内容时,我会动态更改包含文件夹的名称。由于这个文件夹是父文件夹,而我的所有链接都是相对的,这意味着我不必每次编辑我的HTML文件。到目前为止,它似乎工作得还不错。如果这些其他方法保持一致,那么重置缓存将变得非常容易。

因此,在我的请求中,是基本URL导致我的缓存重置,而不是查询字符串到我的URL或背景图像、CSS文件等等。

NSString *myURL = @"index.html";
NSURL *baseURL = [NSURL fileURLWithPath:@"FULL_PATH_TO_DOCS/MYFOLDERV123"];
[myTargetWebView loadHTMLString:myURL baseURL:baseURL];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接