2010-05-14 23 views
7

在我的應用程序中,我需要一種方法來告訴我的webview何時完成加載。如果內容是html,則很容易做到這一點。但是,我的內容源是JavaScript與iFrame裏面,它會導致UIWebView finishedLoad方法多次調用。無論如何,我可以檢查iframe是否完成加載?如何確定iFrame在UIWebView中完成加載

回答

7

我發現的唯一一個萬無一失的方法是聽三種說法即將開始加載的方法,並且它完成加載(加上等效的「失敗」),並手動維護每個方法的計數。

即是這樣的:

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--; 
} 

我也常常不得不overrid的didFail方法 - 蘋果錯誤地使用此報告,例如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 
    } 
} 
+0

+1,非常有幫助的感謝!剛剛起來,我最終在' - (void)webViewDidStartLoad:(UIWebView *)aWebView'方法中增加了outstandingRequests計數器,因爲'shouldStartLoadWithRequest'不太可靠。 – Stunner 2012-04-30 23:01:13

1

(如果它是相同的域名),你可以從iframe中調用一個函數(在父類中)。

top.iFrameLoaded(); 
相關問題