2013-10-01 99 views
14

我在UIWebView中顯示了一個網絡應用,有時頁面的內容也會改變。內容更改後,應用程序清除緩存。但是,當我去我以前訪問過的UIWebView不發送HTTP GET請求一個網頁,而是從緩存中加載,即使我已禁用緩存,像這樣:刪除UIWebView的內部緩存

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 
[[NSURLCache sharedURLCache] setDiskCapacity:0]; 
[[NSURLCache sharedURLCache] setMemoryCapacity:0]; 

Initally我加載請求緩存策略cachePolicy:NSURLRequestReturnCacheDataElseLoad

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:myURLString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]]; 

UIWebView有某種內部緩存。已訪問的頁面將從此內部緩存中加載,而不是通過NSURLCache,也沒有發送請求。

有沒有什麼辦法可以清除UIWebView的內部緩存?我甚至重新創建了UIWebView,但緩存仍然存在。

+0

你有沒有嘗試這裏的解決方案:http://stackoverflow.com/a/14096331/1749367 – helper

+0

是的,任何這些解決方案的成功與我想要完成的工作。 –

+0

我找到了一種解決方法 - 將HTTP響應頭中的Cache-Control屬性設置爲max-age = 0。然後每次都會爲該資源發送一個請求。解決這個問題的一種方法是記錄自上一次清除緩存之後是否有文件被請求,並且在最後一次清除之後第二次加載資源時將max-age設置爲另一個值(例如3600)。 –

回答

21

看來這裏發生的事情是它重新加載了實際的HTML文件,但不一定會重新加載該頁面內的資源。

我看到的一種可能的解決方案是在URL的末尾附加一個查詢參數。例如:

NSString *testURL = [NSString stringWithFormat:@"%@?t=%@", url, randQuery]; 
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:testURL] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0]]; 

,你生成一個random alphanumeric string爲您randQuery查詢參數,或者保持一個持久的計數,只是計數。

這應該強制UIWebView從遠程資源加載。

+0

雖然我不想完全禁用緩存。對不起,我使用NSURLRequestReloadIgnoringLocalAndRemoteCacheData令人困惑。將更新問題。實際上使用cachePolicy:NSURLRequestReturnCacheDataElseLoad。希望它被緩存,直到我清除緩存。 –

+0

然後,聽起來您只需要使用服務器端,當內容發生更改時,您可能會使用AJAX請求或Web套接字,而不是嘗試刷新頁面。這可能適用於你的情況嗎? –

+0

好主意,但不適合我的情況。另一家公司創建了該網絡應用我可以修改它,但網絡應用程序已經建成。 –

7

我有同樣的問題,並將HTTPShouldHandleCookies屬性設置爲NO解決了我的問題。

例如:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strurl]]; 

[request setHTTPShouldHandleCookies:NO]; 

[webView loadRequest: request]; 

希望這有助於。

+0

沒有爲我工作 - 我正在訪問本地文件,但不是通過網絡。不管怎麼說,還是要謝謝你 :) –