是的,我知道UIWebView有didFinishedLoad和didStartLoad代理。
然而,didFinishedLoad并不意味着完全加载完成。当UIWebView完成加载其中一个项目时,它可能会调用该方法。也就是说,加载单个页面时,UIWebView可能会多次调用此代理。
那么,有什么方法可以检查UIWebView是否已经完全加载?
谢谢
J
我对DOM的经验很差,但是在搜索后,我发现document.readyState是一个很好的选择。
来自w3schools:
定义和用法 readyState属性返回当前文档的(加载)状态。
该属性返回四个值之一:
uninitialized - 尚未开始加载
loading - 正在加载
interactive - 已经加载了足够的内容,用户可以进行交互
complete - 完全加载
所以我使用它来知道UIWebView何时已加载文档:
- (void)readyState:(NSString *)str
{ NSLog(@"str:%@",str);
if ([str isEqualToString:@"complete"]||[str isEqualToString:@"interactive"]) {
NSLog(@"IT HAS BEEN DONE");
[pageLoadingActivityIndicator stopAnimating];
}
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//other code...
[self readyState:[browserWebView stringByEvaluatingJavaScriptFromString:@"document.readyState"]];
}
http://www.codingventures.com/2008/12/using-uiwebview-to-render-svg-files/ 关于JavaScript与Objective-C代码通信的使用方法。
也许可以使用文档位置哈希。
并在Web视图HTML正文中添加:
<body onload="document.location.hash='myapp:myobject:myfunction';">
我知道这样有点hacky,但它是有效的。并且可以在基于ajax的内容中使用,因为你可以在你想要调用准备方法的时候自己决定。或者它可以用作完整的通信方案。