每次加载页面中的任何对象时,似乎都会发送webViewDidFinishLoad消息.有没有办法确定所有内容加载都已完成?
我猜iframe导致webViewDidStartLoad
/ webViewDidFinishLoad
pair.
[webView isLoading]
作为答案提到的支票对我不起作用; 它false
甚至在两个webViewDidFinishLoad
电话中的第一个之后返回.相反,我跟踪加载如下:
- (void)webViewDidStartLoad:(UIWebView *)webView { webViewLoads_++; } - (void)webViewDidFinishLoad:(UIWebView *)webView { webViewLoads_--; if (webViewLoads_ > 0) { return; } … } - (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error { webViewLoads_--; }
(注意这只有在开始/结束对不是连续出现的情况下才有效,但根据我迄今为止的经验尚未发生.)
检查一下,它肯定会对你有用:
- (void)webViewDidFinishLoad:(UIWebView *)webView { if ([[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) { // UIWebView object has fully loaded. } }
有趣的是,我不会认为它会像那样工作.虽然我确定还有其他方法可以做到这一点(有没有办法从webViewDidFinishLoad消息中提取URL,以便您可以看到哪一个是主页完成加载?),我能想到的主要是使用estimatedProgress检查页面的进度,并在100%完成加载时触发你要做的任何事情,这就是我在我的应用程序中所做的.谷歌"iphone webview estimatedprogress",点击我写的关于如何做到这一点的指南的第一个链接.
更新:
请使用下面的phopkins答案而不是我的!在您的应用程序中使用私有API是一个坏主意,您可能会被拒绝,他的解决方案是正确的.