当前位置:  开发笔记 > 编程语言 > 正文

UIWebView - 如何识别"最后"webViewDidFinishLoad消息?

如何解决《UIWebView-如何识别"最后"webViewDidFinishLoad消息?》经验,为你挑选了3个好方法。

每次加载页面中的任何对象时,似乎都会发送webViewDidFinishLoad消息.有没有办法确定所有内容加载都已完成?



1> Fiona Hopkin..:

我猜iframe导致webViewDidStartLoad/ webViewDidFinishLoadpair.

[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_--;
}

(注意这只有在开始/结束对不是连续出现的情况下才有效,但根据我迄今为止的经验尚未发生.)


我讨厌黑客做这样的愚蠢的解决方法 - 但这仍然比接受的答案更好,后者涉及使用私有的Apple API.谢谢你的回答.
和Ches一样.这对我来说根本不起作用.叹了口气.
不适合我.待完成的计数器在完成的过程中多次达到零.我正在同时下载几个不同的UIWebViews.
@phopkins添加这个:)`(void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error { - webViewLoads_; }`

2> Vinod Singh..:

检查一下,它肯定会对你有用:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    if ([[webView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"]) {
        // UIWebView object has fully loaded.
    }
}


不幸的是,这并不是它自身的问题.有时webViewDidFinishLoad:方法将触发,因为资源已完成下载,但在渲染器完成构建DOM /加载Javascript等之前,因此document.readyState尚未等于"完成".解决方案可能是从第一个webViewDidFinishLoad:调用每隔0.5秒左右开始评估document.readyState的调用启动一个重复计时器.然而,几乎没有优雅.

3> AriX..:

有趣的是,我不会认为它会像那样工作.虽然我确定还有其他方法可以做到这一点(有没有办法从webViewDidFinishLoad消息中提取URL,以便您可以看到哪一个是主页完成加载?),我能想到的主要是使用estimatedProgress检查页面的进度,并在100%完成加载时触发你要做的任何事情,这就是我在我的应用程序中所做的.谷歌"iphone webview estimatedprogress",点击我写的关于如何做到这一点的指南的第一个链接.

更新:

请使用下面的phopkins答案而不是我的!在您的应用程序中使用私有API是一个坏主意,您可能会被拒绝,他的解决方案是正确的.


我相信,在某些时候,Apple允许这些应用程序进入他们的商店,但我可以确认他们目前没有.我在11月份使用此API提交了一个应用程序,但它被拒绝了.为什么Apple在推出iPhone SDK四年后仍然不允许开发人员访问Web视图的进度?谁知道.
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有