我正在将一个较大的(和javascript密集的)页面加载到UIWebView中,我想在它思考的时候添加一个UIActivityView来旋转。
问题是,在渲染实际发生之前,我的- (void)webViewDidFinishLoad:(UIWebView *)webView
方法被调用了很长时间。足以使我的微调器(停止时设置为隐藏)从未真正显示出来。在UI组装完成之后,即使在UIWebView实际将商品送到屏幕之前有足够的时间来怀疑它是否被破坏,微调器已经被停止并隐藏了。
我希望有一个“webViewDidFinishRendering”,但这意味着WebKit不仅仅是lickedy-split fast ...; - )
思考?也许我应该抛弃这个东西并设置一个计时器来阻止它,并从WebView中实际发生的任何东西中取消它?
答案 0 :(得分:4)
以下是我如何处理需要确保页面完全加载的情况:为document.onload事件添加一个javascript事件处理程序,它执行以下操作:
function onDocumentLoad() {
window.location.href = 'myapp://loaded';
}
然后在你的UIWebViewDelegate中,你可以这样做:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([[request.URL absoluteString] isEqual:@"myapp://loaded"]) {
[activityIndicator stopAnimating];
return NO;
}
return YES;
}
答案 1 :(得分:0)
是的,正如您所发现的那样,webViewDidFinishLoad会告诉您何时将数据加载到视图中,但是一旦完成,就不会提供有关JS可能会发生什么的信息。不幸的是,UIWebView非常有限。你可能做的最好的事情是通过一个JS查询,通过stringByEvaluatingJavaScriptFromString来轮询它。如果您可以运行一些JS来测试Web视图中的事情是否已完成,那么您可以每半秒执行一次,并在获得肯定结果时关闭微调器。