¿Cómo se verifica si UIWebView está vacío o no?

Necesito verificar si una vista web cuando se completa la carga tiene algún contenido o no.

Lo que necesito es simple. Es una tira pequeña en la parte inferior de mis páginas (como un anuncio)

Yo lo llamo

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

Recibo la callback

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

Pero en mi caso, la vista web regresará vacía y en algún momento tendrá datos.

No quiero mostrar la vista web si mi file php de server no devolvió nada.

¿Cómo puedo verificar que recibí una página vacía en la callback (o de cualquier otra manera)?

Si está cargando una página HTML:

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

O bien, puede cargar el contenido primero, probar si no está vacío y luego alimentarlo a la vista web. Ver UIWebView's loadHTMLString:baseURL: o loadData:MIMEType:textEncodingName:baseURL:

Esto se basa en el enfoque de Jano, pero debería funcionar mejor:

 NSString *script = @"document.getElementsByTagName('body')[0].innerHTML.length"; NSString *length = [self.webView stringByEvaluatingJavaScriptFromString:script]; if (length.integerValue > 0) { NSLog(@"not empty"); } 

Simplemente respondiendo a una publicación anterior, pero tal vez los recién llegados la encuentren útil. Luché con el mismo problema y encontré que esta solución funcionaba en mi caso:

 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 } 

Puede llamarlo desde el método webViewDidFinishLoad: método.

En mi caso, estaba buscando detectar si el PDF estaba mal formado. Es decir, la vista web estaría vacía porque el PDF no se pudo cargar. Como con iOS 7.1.1, no obtuve la callback del delegado didFailLoadWithError, necesitaba una forma diferente de hacer esto. Terminé de usar el siguiente método antes de intentar cargar el documento PDF en la vista 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; }