【发布时间】:2014-05-01 16:22:32
【问题描述】:
我需要在加载 webview fo 中的任何 url 时检查响应状态代码。现在我们可以考虑我在 Web 视图中加载的任何 Web 应用程序。所以我需要使用该 Web 视图跟踪每个请求并相应地检查响应代码。为了找到响应代码,我需要在 uiwebview 的委托方法“shouldStartLoadWithrequest”中使用 NSUrlConnection。像这样的东西 -
- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType{
NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self];
if (conn == nil) {
NSLog(@"cannot create connection");
}
return YES;
}
和 NSURLConnectionDelegate 一样 --
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"connection:didReceiveResponse");
[self log:@"received response."];
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
int status = [httpResponse statusCode];
NSLog(@"http status code: %d", status);
if (status == 200) {
NSLog(@"Response OK");
}
else {
NSLog(@"Response is not OK");
}
}
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"connection:didReceiveData");
}
- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"connection:didFailWithError - %@", error);
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"connectionDidFinishLoading");
}
但是在这个过程中,服务器上有2个调用。一个用于 UIWebview,另一个用于 NSUrlConnection。我只需要对服务器进行一次调用,就可以在其中找到状态代码。有人可以指导我吗?
【问题讨论】:
-
我认为 shouldStartLoadWithRequest 方法中甚至不会有响应,因为它还没有开始。不能只用 webViewDidFinishLoad 方法吗?
-
我面临同样的问题。我已经阅读了大量的 stackoverflow 回复,但我从 Ray 那里得到了教程,这应该只需要一个电话就可以做到……raywenderlich.com/59982/nsurlprotocol-tutorial
-
@Skodik.o :是的,我已经使用 NSURLProtocol 实现了它。它解决了问题。
标签: ios iphone uiwebview uiwebviewdelegate nsurlconnectiondelegate