我在UIWebView中加载大型网页时遇到问题,因为某些原因导致连接因尝试加载java脚本文件而丢失。负载在没有调用didFailLoadWithError或webViewDidFinishLoad的点停止。委托设置正确,因为没有网络错误,页面加载正常,并调用webViewDidFinishLoad方法。
在试图弄清楚为什么页面加载停止我实现并注册了一个自定义的NSURLProtocol,我发现连接委托didFailWithError大部分时间都会被调用,但之后永远不会调用Web视图委托。
我更改了自定义协议以在主线程中运行连接,这导致每次网络连接断开时都会调用didFailWithError方法
- (void)startLoading {
NSMutableURLRequest *newRequest = [self.request mutableCopy];
[NSURLProtocol setProperty:@YES forKey:ProtocolKey inRequest:newRequest];
self.connection = [[NSURLConnection alloc]
initWithRequest:newRequest
delegate:self startImmediately:NO];
[self.connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[self.connection start];
}
Web视图委托webViewDidFinishLoad方法仍然没有被调用,所以我向didFailWithError方法添加了一个通知,它允许我在我的Web视图控制器中处理错误
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSDictionary *dict = @{ @"errorDescription":error.localizedDescription };
[[NSNotificationCenter defaultCenter] postNotificationName:ErrorKey object:nil ];
[self.client URLProtocol:self didFailWithError:error];
}
我无法弄清楚为什么在调用委托方法并处理错误之前,后台线程上的Web视图运行的请求似乎被破坏了?
我遇到了与WKWebView类似的问题,我假设使用相同的资源javascript,但我无法在自定义协议处理程序中捕获错误,所以我不知道那里发生了什么。
之前有没有人碰到这个?或者有更好的方法来解决这个问题?