我有一些代码需要在a UIWebView
完成加载文档后运行.为此,我将UIWebView
的委托设置为我的控制器,并实现了webViewDidFinishLoading
方法.
这会被调用多次,具体取决于要加载的页面类型.我不确定是因为ajax请求、图像请求,还是iFrame.
有没有办法判断主请求已经完成,这意味着HTML已经完全加载?
或者延迟我的代码启动,直到所有这些事件都启动完毕?
我有一些代码需要在a UIWebView
完成加载文档后运行.为此,我将UIWebView
的委托设置为我的控制器,并实现了webViewDidFinishLoading
方法.
这会被调用多次,具体取决于要加载的页面类型.我不确定是因为ajax请求、图像请求,还是iFrame.
有没有办法判断主请求已经完成,这意味着HTML已经完全加载?
或者延迟我的代码启动,直到所有这些事件都启动完毕?
记录加载开始和完成的跟踪可能会很有启发性(如果您还没有走到这一步的话).
- (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
和其他两个委托函数的调用,并能够确定加载何时完成.