2011-09-28 68 views
8

我需要檢查webview在完成加載時是否有任何內容。如何檢查UIWebView是否爲空

我需要的很簡單。它在我的網頁的底部(如一個廣告)

我打電話

NSURLRequest *request=[NSURLRequest requestWithURL:adURL]; 
[gWebView loadRequest:request]; 

我得到的回調小的WebView條

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

但在我的情況web視圖將返回空有時它應該有數據。

我不想顯示webview如果我的服務器PHP文件沒有返回任何東西。

如何驗證我在回調(或任何其他方式)中收到空白頁面?

回答

14

如果您加載HTML網頁:

NSString *string = [myWebView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].innerHTML"]; 
BOOL isEmpty = string==nil || [string length]==0; 

,或者如果它不是空的,你可以先加載的內容,測試,然後將其提供給web視圖。見UIWebView's loadHTMLString:baseURL:loadData:MIMEType:textEncodingName:baseURL:

+0

這工作,但它返回的字符串「」,雖然我可以使它通過檢查工作,如果我得到的是,在串。謝謝您的幫助。 – Anand

+5

對不起「一年後的評論」,但這可能有幫助。只需將('html')更改爲('body')即可。 –

+1

我試圖用它來檢測是否已加載(或實際上未加載)格式錯誤的PDF文件,並且「body」和「html」都沒有用於此目的。有趣的是,在iOS7上,如果PDF文檔格式錯誤,委託方法didFailLoadWithError不會被調用。 –

0

在我的情況下,我正在尋找檢測PDF是否格式錯誤。也就是說,Web視圖將是空的,因爲PDF不能被加載。由於iOS 7.1.1,我沒有得到didFailLoadWithError委託回調,我需要一種不同的方式來做到這一點。在嘗試將PDF文檔加載到Web視圖之前,我最終使用了以下方法。

// See https://developer.apple.com/library/ios/documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html 
- (BOOL) isValidPDFDoc: (NSURL *) deviceLocalURL { 
    CFStringRef path; 
    CFURLRef url; 
    CGPDFDocumentRef document; 
    size_t count; 
    BOOL validDocument = YES; 

    // Must use path of URL not absoluteString here. 
    path = CFStringCreateWithCString (NULL, [[deviceLocalURL path] cStringUsingEncoding:NSASCIIStringEncoding], 
             kCFStringEncodingUTF8); 
    url = CFURLCreateWithFileSystemPath (NULL, path, // 1 
             kCFURLPOSIXPathStyle, 0); 
    CFRelease (path); 
    document = CGPDFDocumentCreateWithURL (url);// 2 
    if (!document) { 
     validDocument = NO; 
    } 

    CFRelease(url); 
    count = CGPDFDocumentGetNumberOfPages (document);// 3 
    if (count == 0) { 
     validDocument = NO; 
    } 

    CGPDFDocumentRelease (document); 

    return validDocument; 
} 
4

只要回覆舊帖子,但也許新來者會發現它有用。我掙扎着同樣的問題,發現這個解決方案在我的情況下工作:方法:

if (webView.request.URL.absoluteURL == nil) { 
     NSLog(@"nil webby"); 
     NSLog(@"url: %@", webView.request.URL.absoluteURL); 
     // Perform some task when the url is nil 
    } else { 
     NSLog(@"loaded webby"); 
     NSLog(@"url: %@", webView.request.URL.absoluteURL); 
     // Perform some task when the url is loaded 
} 

您可以從webViewDidFinishLoad調用它。

5

這是基於Jano的的做法,但應該有更好的表現:

NSString *script = @"document.getElementsByTagName('body')[0].innerHTML.length"; 
NSString *length = [self.webView stringByEvaluatingJavaScriptFromString:script]; 

if (length.integerValue > 0) { 
    NSLog(@"not empty"); 
}