UIWebViewにリクエストを送信しています。ロードされたWebページにAJAX呼び出しがあります。ユーザーがログインしているかどうかを判断するには、AJAXトラフィックを分析する必要があります。これを行うために、AppDelegateにNSURLCacheをインストールしました。
MYURLCache *cache = [[MYURLCache alloc] init];
[NSURLCache setSharedURLCache:cache];
このMYURLCacheクラスは、Webビューを通過するトラフィックを正しく受信します。AJAX呼び出しのみを終了できます。次に、AJAX呼び出しの独自の要求を生成します。これは、Webサーバーから完全に細かい応答を返します。したがって、ここで行う最後のステップは、NSCachedURLResponse戻りオブジェクトを作成することです。私もこれを管理しましたが、オブジェクトを返すときにWebビューは何もしません。nilだけを返すと、WebViewはすべてを正常にロードします(nilはNSURLCacheのメッセージであり、何もキャッシュされないため、WebViewはそれ自体でロードを開始する必要があります)。
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request {
if ([[[request URL] absoluteString] rangeOfString:@"/ajax/"].location == NSNotFound) {
return nil;
} else {
ASIHTTPRequest *asirequest = [ASIHTTPRequest requestWithURL:[request URL]];
[asirequest setValidatesSecureCertificate:NO];
[asirequest startSynchronous];
NSError *error = [asirequest error];
NSData* data = [[asirequest responseString] dataUsingEncoding:NSUTF8StringEncoding];
// Create the cacheable response
NSURLResponse *urlresponse = [[NSURLResponse alloc] initWithURL:[request URL] MIMEType:@"application/json" expectedContentLength:[data length] textEncodingName:@"UTF-8"];
NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data];
NSLog(@"cachedResponse %@", cachedResponse);
NSLog(@"cachedResponse data %@", [[NSString alloc] initWithData:[cachedResponse data] encoding:NSUTF8StringEncoding]);
return cachedResponse;
}
return nil;
}