【发布时间】:2011-08-30 05:38:55
【问题描述】:
是的,我知道 UIWebView 有 didFinishedLoad 和 didStartLoad 委托。
但是,didFinishedLoad 并不意味着完全完成。它可以在 UIWebView 完成加载的项目之一时调用。即,UIWebView 可能会在加载单个页面时多次调用此委托。
那么无论如何可以告诉我如何检查 UIWebView 是否已完全加载?
谢谢
J
【问题讨论】:
是的,我知道 UIWebView 有 didFinishedLoad 和 didStartLoad 委托。
但是,didFinishedLoad 并不意味着完全完成。它可以在 UIWebView 完成加载的项目之一时调用。即,UIWebView 可能会在加载单个页面时多次调用此委托。
那么无论如何可以告诉我如何检查 UIWebView 是否已完全加载?
谢谢
J
【问题讨论】:
我在 DOM 方面的经验很差,但经过一番搜索后,我发现 document.readyState 是一个不错的选择。
来自 w3schools:
定义和用法 readyState 属性返回当前文档的(加载)状态。
此属性返回四个值之一:
未初始化 - 尚未开始加载
loading - 正在加载
interactive - 已加载足够多,用户可以与之交互
完成 - 完全加载
所以我用它来知道 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 代码的通信
也许使用文档位置哈希。
并在webview html body中添加:
<body onload="document.location.hash='myapp:myobject:myfunction';">
我知道它有点老套,但很有效。它可以在基于 ajax 的内容中使用,因为当你想调用你的 ready 方法时,它取决于你。或者它可以作为一个完整的通信方案。
【讨论】:
您可以做的是,在状态栏中可见的视图上显示一个网络指示器。当您的页面被加载时,指示器将继续旋转,直到并且除非页面被完全加载。页面完全加载后,指示器将停止旋转并且不可见。
看看这个例子:Network indicator
【讨论】: