web-dev-qa-db-ja.com

UIWebViewの内部キャッシュを削除します

UIWebViewでWebアプリを表示していますが、ページのコンテンツが変更されることがあります。コンテンツが変更された後、アプリはキャッシュをクリアします。しかし、以前にアクセスしたページに移動すると、UIWebViewはHTTPGETリクエストを送信しませんが、次のようにキャッシュを無効にしても、キャッシュからロードします。

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

最初に、cachePolicy cachePolicy:NSURLRequestReturnCacheDataElseLoadを使用してリクエストを読み込んでいます。

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

UIWebViewにはある種の内部キャッシュがあります。すでにアクセスしたページは、NSURLCacheを経由する代わりに、この内部キャッシュから読み込まれます。また、リクエストは送信されません。

UIWebViewの内部キャッシュをクリアする方法はありますか? UIWebViewを再作成していますが、キャッシュはまだ残っています。

14
Niklas Berglund

ここで起こっていることは、実際のHTMLファイルをリロードすることですが、必ずしもそのページ内のリソースをリロードするわけではないようです。

私が見た可能な解決策は、URLの最後にクエリパラメータを追加することです。例えば:

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

ここで、randQueryクエリパラメータとして ランダムな英数字の文字列 を生成するか、永続的なカウントを維持してカウントアップします。

これにより、UIWebViewがリモートリソースから強制的にロードされます。

21
Joel Fischer

同じ問題が発生し、HTTPShouldHandleCookiesプロパティをNOに設定すると、問題が修正されました。

例えば:

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

[request setHTTPShouldHandleCookies:NO];

[webView loadRequest: request];

この助けを願っています。

7
Katerina