【问题标题】:How to determine iFrame finished loading in UIWebView如何在 UIWebView 中确定 iFrame 已完成加载
【发布时间】:2010-05-14 20:24:31
【问题描述】:

在我的应用程序中,我需要一种方法来判断我的 web 视图何时完成加载。如果内容是 html,这很容易做到。但是,我的内容源是javascript,里面有iFrame,会导致UIWebViewfinishedLoad方法被调用多次。无论如何我可以检查 iframe 是否已完成加载?

【问题讨论】:

    标签: javascript iphone iframe


    【解决方案1】:

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

    即类似:

    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 视频的处理。这不是失败,而是“页面由其他应用程序加载”。

    例如

    - (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,非常有帮助,谢谢!提醒一下,我最终增加了 - (void)webViewDidStartLoad:(UIWebView *)aWebView 方法中的未完成请求计数器,因为 shouldStartLoadWithRequest 的可靠性较低。
    【解决方案2】:

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

    top.iFrameLoaded();
    

    【讨论】:

      【解决方案3】:

      要判断一个 webview 是否正在加载,你可以使用 webView.isLoading 检查 webview 的所有框架是否已完成加载。不计算必要的 iframe 数量。只需检查isLoadingwebViewDidFinishLoad: 中是否为真

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-07
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-16
        • 2010-12-12
        • 2010-10-30
        相关资源
        最近更新 更多