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
を再作成していますが、キャッシュはまだ残っています。
ここで起こっていることは、実際のHTMLファイルをリロードすることですが、必ずしもそのページ内のリソースをリロードするわけではないようです。
私が見た可能な解決策は、URLの最後にクエリパラメータを追加することです。例えば:
NSString *testURL = [NSString stringWithFormat:@"%@?t=%@", url, randQuery];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:testURL] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0]];
ここで、randQueryクエリパラメータとして ランダムな英数字の文字列 を生成するか、永続的なカウントを維持してカウントアップします。
これにより、UIWebViewがリモートリソースから強制的にロードされます。
同じ問題が発生し、HTTPShouldHandleCookiesプロパティをNOに設定すると、問題が修正されました。
例えば:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strurl]];
[request setHTTPShouldHandleCookies:NO];
[webView loadRequest: request];
この助けを願っています。