在我的应用程序中,我需要一种方法来判断我的webview何时完成加载。如果内容是html,这是很容易做到的。但是,我的内容源是iFrame里面的javascript,它会导致UIWebView finishedLoad方法被多次调用。有没有什么方法可以让我检查iframe是否已经加载完毕?
发布于 2010-11-20 02:56:57
我找到的唯一一种万无一失的方法是监听三个方法,它们说它即将开始加载,并且它完成了加载(加上“失败”的等价物),并手动维护每个方法的计数。
例如,类似于:
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方法-苹果错误地使用了这个方法来报告,例如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
}
}
发布于 2010-12-03 04:28:00
(如果是同一个域)您可以从iframe调用函数(在父级中)。
top.iFrameLoaded();
发布于 2013-06-29 12:51:02
要判断网页视图是否正在加载,您可以使用webView.isLoading
来检查网页视图的所有框架是否都已加载完毕。不计算必要的iframe数量。只需检查webViewDidFinishLoad:
内部的isLoading
是否为真
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebView_Class/Reference/Reference.html
https://stackoverflow.com/questions/2837377
复制相似问题