UIWebView完成得太快了

时间:2010-05-11 18:30:43

标签: iphone uiwebview

我正在将一个较大的(和javascript密集的)页面加载到UIWebView中,我想在它思考的时候添加一个UIActivityView来旋转。

问题是,在渲染实际发生之前,我的- (void)webViewDidFinishLoad:(UIWebView *)webView方法被调用了很长时间。足以使我的微调器(停止时设置为隐藏)从未真正显示出来。在UI组装完成之后,即使在UIWebView实际将商品送到屏幕之前有足够的时间来怀疑它是否被破坏,微调器已经被停止并隐藏了。

我希望有一个“webViewDidFinishRendering”,但这意味着WebKit不仅仅是lickedy-split fast ...; - )

思考?也许我应该抛弃这个东西并设置一个计时器来阻止它,并从WebView中实际发生的任何东西中取消它?

2 个答案:

答案 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视图中的事情是否已完成,那么您可以每半秒执行一次,并在获得肯定结果时关闭微调器。