2011-09-28 13 views
8

Necesito comprobar si una vista web cuando se completa la carga tiene algún contenido o no.cómo se comprueba si UIWebView está vacío o no

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

llamo

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

puedo obtener la devolución de llamada

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

Pero en mi escenario de la vista web volverá vacía y alguna vez tendrá datos.

No quiero mostrar la vista web si el archivo php de mi servidor no arrojó nada.

¿Cómo puedo verificar que he recibido una página vacía en la devolución de llamada (o de cualquier otra manera)?

Respuesta

14

Si va a cargar una página HTML:

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

O puede cargar el contenido en primer lugar, la prueba si no está vacío, y luego alimentar a la vista web. Consulte UIWebView's loadHTMLString:baseURL: o loadData:MIMEType:textEncodingName:baseURL:.

+0

Esto funciona pero vuelve "" en la cadena, aunque podría hacer que funcione comprobando si consigo que en el cuerda. Gracias por la ayuda. – Anand

+5

Disculpe por el comentario "después de un año", pero esto podría ayudar. Simplemente cambie ('html') a ('cuerpo') y debería funcionar bien. –

+1

Estaba tratando de usar esto para detectar si un archivo PDF mal formado se había cargado (o, de hecho, no cargado), y ni el "cuerpo" ni el "html" funcionan para este propósito. Curiosamente, en iOS7, el método delegado, didFailLoadWithError no se llama si el documento PDF está mal formado. –

0

En mi caso, estaba buscando detectar si el PDF estaba mal formado. Es decir, la vista web estaría vacía porque no se pudo cargar el PDF. Dado que con iOS 7.1.1, no obtenía la devolución de llamada del delegado didFailLoadWithError, necesitaba una forma diferente de hacerlo. Terminé usando 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; 
} 
4

Respondiendo a una publicación anterior, pero tal vez las nuevas personas lo encuentren útil. Luché con el mismo problema y encontré esta solución para trabajar 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 
} 

se le puede llamar desde el webViewDidFinishLoad: Método.

5

Esto se basa en el enfoque de Jano, pero debería dar mejores resultados:

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

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