我有一些代码需要在UIWebView加载完文档后运行。为此,我将UIWebView的委托设置为我的控制器,并实现了webViewDidFinishLoading方法。
它会被多次调用,这取决于要加载的页面类型。我不确定是不是因为ajax请求,图像请求,甚至是iframe。
有没有一种方法可以告诉我们主请求已经完成,这意味着HTML已经完全加载?
或者延迟我的代码触发,直到所有这些事件都触发完成?
发布于 2009-12-06 20:26:00
(如果您还没有走到这一步) NSLog加载开始和结束的跟踪可能是有启发性的。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"Loading: %@", [request URL]);
return YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"didFinish: %@; stillLoading: %@", [[webView request]URL],
(webView.loading?@"YES":@"NO"));
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
NSLog(@"didFail: %@; stillLoading: %@", [[webView request]URL],
(webView.loading?@"YES":@"NO"));
}我只是在我的一个项目中查看了对这三个项目的调用,该项目从我的包中加载了一个帮助页面,并包含嵌入式资源(外部css、YUI!、图像)。唯一通过的请求是初始页面加载,任何依赖项都不会调用shouldStartLoadWithRequest。所以很奇怪为什么你的didFinishLoad会被多次调用。
也许您所看到的是由于重定向,或者正如前面提到的,是由于加载的页面中的ajax调用。但您至少应该能够平衡对shouldStartLoad和其他两个委托函数的调用,并能够确定加载何时完成。
发布于 2009-12-04 21:24:05
您可以执行以下操作来检查加载何时完成。因为您可以在同一个页面上包含许多内容,所以您需要它。
- (void)webViewDidFinishLoad:(UIWebView *)webview {
if (webview.isLoading)
return;
// do some work
}发布于 2014-04-23 17:52:08
检查这一点,它的实现方式很简单,不需要写太多代码:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if ([[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {
// UIWebView object has fully loaded.
}
}https://stackoverflow.com/questions/1842370
复制相似问题