2013-10-01 2 views
14

Я показываю веб-приложение в UIWebView, и иногда содержимое страниц будет меняться. После изменения содержимого приложение очистит кеш. Но когда я иду на страницу, я ранее посетил UIWebView не отправляет запрос HTTP GET, но загружает из кэша, хотя я отключил кэш так:Удалить внутренний кеш UIWebView

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

Initally Я выгрузку запрос с cachePolicy 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

Я нашел обходное решение - установка атрибута Cache-Control в заголовке ответа HTTP для max-age = 0. Затем запрос будет отправляться на ресурс каждый раз. Способом его решения может быть отслеживание того, запрашивался ли файл до момента последней очистки кэша, и установите максимальное возрастание на другое значение (например, 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 или веб-сокеты, когда контент изменяется, а не пытается обновить страницу. Возможно, это сработает в вашей ситуации? –

+0

Хорошая идея, но не подходит в моем случае. Другая компания создала веб-приложение. Я могу его изменить, но веб-приложение уже построено. –

7

У меня была такая же проблема и установка свойства HTTPShouldHandleCookies для NO исправила мою проблему.

Например:

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

[request setHTTPShouldHandleCookies:NO]; 

[webView loadRequest: request]; 

Надеется, что это поможет.

+0

Не работал для меня - я получаю доступ к локальным файлам, хотя и не к сети. Спасибо, в любом случае :) –

Смежные вопросы