在我的应用程序中,我需要一种方法来判断我的webview何时完成加载.如果内容是html,那么很容易做到这一点.但是,我的内容源是javascript与iFrame里面,它会导致多次调用UIWebView finishedLoad方法.无论如何我可以查看iframe是否已完成加载?
我发现的唯一万无一失的方法是听三个说它即将开始加载的方法,并且它完成加载(加上等于"失败"),并手动维护每个方法的计数.
即:像:
int outstandingRequests; - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { outstandingRequests++; } - (void)webViewDidFinishLoad:(UIWebView *)webView { outstandingRequests--; if( outstandingRequests < 1 ) viewLoadingPleaseWait.hidden = TRUE; } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { outstandingRequests--; }
我通常也不得不覆盖didFail方法 - Apple错误地使用它来报告,例如YouTube播放器已经接管了YouTube视频的处理.这不是一个失败,它是一个"页面由不同的应用程序加载".
例如
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { outstandingRequests--; if( [error code] == NSURLErrorCancelled ) { NSLog(@"[%@] ...webView CANCELLED loading", [self class] ); } else if( [[error domain] isEqualToString:@"WebKitErrorDomain"] && [error code] == 204) { // no worries ... YouTube, iCal, or etc took over the page load } }