2011-06-25 65 views
0

我正在製作iPhone應用程序。webView中的圖像緩存問題

我從圖中創建圖像,然後將其嵌入到HTML中以使用loadHTMLString:baseURL:方法將圖像顯示到webView中。

現在圖像第一次顯示正常。

當我對圖形進行更改並且圖像被重新捕獲時,它仍然顯示舊圖像。

所以基本上它不會更新圖像。圖像名稱相同,舊圖像從Documents目錄中刪除,但它仍以某種方式顯示舊圖像。

如何在webView中刪除這種圖像緩存?

回答

0

我解決這個問題的方法是用圖像名稱一起添加時間戳,這樣每次是可以獲得imagename生成的是獨特的。這樣它總是提取正確的圖像。

希望這可以幫助別人。

0

我知道,以避免在本地HTML頁面的圖像緩存,最好的辦法就是直接將它們嵌入到html or css

0

它是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

  • NSURLProtocol的教程::http://devmonologue.com/ios/tutorials/nsurlprotocol-tutorial/
  • 在HTTP

    • 緩存