在我的应用中,我需要一种方法来判断我的webview何时完成加载。如果内容是html,那么很容易做到这一点。但是,我的内容源是javascript与iFrame里面,它会导致多次调用UIWebView finishedLoad方法。无论如何我可以查看iframe是否已完成加载?
答案 0 :(得分:7)
我发现的唯一一个万无一失的方法是听三个方法,说它即将开始加载,并且它已完成加载(加上等于“失败”),并手动维护每个方法的计数。 / p>
即。类似的东西:
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视频的处理。这不是一个失败,它是一个“页面由不同的应用程序加载”。
e.g。
- (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
}
}
答案 1 :(得分:1)
(如果它是同一个域),您可以从iframe调用一个函数(在父级中)。
top.iFrameLoaded();
答案 2 :(得分:0)
要判断是否正在加载webview,您可以使用
webView.isLoading
检查webview的所有帧是否都已完成加载。不计算必要的iframe数量。只需检查isLoading
webViewDidFinishLoad:
是否为真