如何在UIWebView中确定iFrame完成加载

时间:2010-05-14 20:24:32

标签: javascript iphone iframe

在我的应用中,我需要一种方法来判断我的webview何时完成加载。如果内容是html,那么很容易做到这一点。但是,我的内容源是javascript与iFrame里面,它会导致多次调用UIWebView finishedLoad方法。无论如何我可以查看iframe是否已完成加载?

3 个答案:

答案 0 :(得分:7)

我发现的唯一一个万无一失的方法是听三个方法,说它即将开始加载,并且它已完成加载(加上等于“失败”),并手动维护每个方法的计数。 / p>

即。类似的东西:

int outstandingRequests;

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    outstandingRequests++;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    outstandingRequests--;

    if( outstandingRequests < 1 )
    viewLoadingPleaseWait.hidden = TRUE;
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    outstandingRequests--;
}

我通常也不得不覆盖didFail方法 - Apple错误地使用它来报告例如YouTube播放器已接管YouTube视频的处理。这不是一个失败,它是一个“页面由不同的应用程序加载”。

e.g。

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    outstandingRequests--;

    if( [error code] == NSURLErrorCancelled )
    {
        NSLog(@"[%@] ...webView CANCELLED loading", [self class] );
    }
    else if( [[error domain] isEqualToString:@"WebKitErrorDomain"]
    && [error code] == 204)
    {
        // no worries ... YouTube, iCal, or etc took over the page load
    }
}

答案 1 :(得分:1)

(如果它是同一个域),您可以从iframe调用一个函数(在父级中)。

top.iFrameLoaded();

答案 2 :(得分:0)

要判断是否正在加载webview,您可以使用 webView.isLoading 检查webview的所有帧是否都已完成加载。不计算必要的iframe数量。只需检查isLoading

webViewDidFinishLoad:是否为真

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebView_Class/Reference/Reference.html