我正在製作iPhone應用程序。webView中的圖像緩存問題
我從圖中創建圖像,然後將其嵌入到HTML中以使用loadHTMLString:baseURL:
方法將圖像顯示到webView中。
現在圖像第一次顯示正常。
當我對圖形進行更改並且圖像被重新捕獲時,它仍然顯示舊圖像。
所以基本上它不會更新圖像。圖像名稱相同,舊圖像從Documents目錄中刪除,但它仍以某種方式顯示舊圖像。
如何在webView中刪除這種圖像緩存?
我正在製作iPhone應用程序。webView中的圖像緩存問題
我從圖中創建圖像,然後將其嵌入到HTML中以使用loadHTMLString:baseURL:
方法將圖像顯示到webView中。
現在圖像第一次顯示正常。
當我對圖形進行更改並且圖像被重新捕獲時,它仍然顯示舊圖像。
所以基本上它不會更新圖像。圖像名稱相同,舊圖像從Documents目錄中刪除,但它仍以某種方式顯示舊圖像。
如何在webView中刪除這種圖像緩存?
我解決這個問題的方法是用圖像名稱一起添加時間戳,這樣每次是可以獲得imagename生成的是獨特的。這樣它總是提取正確的圖像。
希望這可以幫助別人。
我知道,以避免在本地HTML頁面的圖像緩存,最好的辦法就是直接將它們嵌入到html or css
它是webkit中的緩存,導致您的問題。
要解決這個問題,你可能不得不用http協議來做些什麼。也就是說,您應該爲您的http響應設置正確的緩存相關標頭,例如Expires
,Age
,Cache-Control
,Last-Modified
。之後,webkit將不再爲您的圖片緩存圖片。
如果您沒有權限修改服務器上的標頭,則可以使用NSURLProtocol
在將響應發送到webkit之前攔截響應。
關鍵代碼:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSHTTPURLResponse *httpRes = (NSHTTPURLResponse *)response;
NSMutableDictionary *headers = [[httpRes allHeaderFields] mutableCopy];
[headers removeObjectForKey:@"Expires"];
[headers removeObjectForKey:@"Cache-Control"];
[headers removeObjectForKey:@"Age"];
[headers removeObjectForKey:@"Last-Modified"];
NSHTTPURLResponse *newRes = [[NSHTTPURLResponse alloc] initWithURL:[[connection originalRequest] URL]
statusCode:[httpRes statusCode]
HTTPVersion:@"HTTP/1.1"
headerFields:[headers copy]
];
[self.client URLProtocol:self didReceiveResponse:[newRes copy] cacheStoragePolicy:NSURLCacheStorageNotAllowed];
}
價:http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2.3