2009-02-25 9 views

Respuesta

4

UIWebView es una pequeña sombra pálida y pobre de WebKit llena WebView, para lo que esto es fácil. -webView:shouldStartLoadWithRequest:navigationType: solo recibe llamadas para la navegación. No se llama para todas las solicitudes como WebPolicyDelegate en mac. Con UIWebView, así es como atacaría este problema:

Implemente -webView:shouldStartLoadWithRequest:navigationType: y configúrelo para que siempre devuelva NO. Pero también tomará la solicitud y generará un NSURLConnection. Cuando el NSURLConnection termine de buscar los datos, revisará las etiquetas IMG y las modificará al marcador que desee. Luego, cargará la cadena resultante en el UIWebView usando -loadHTMLString:baseURL:.

Por supuesto, el análisis del HTML no es una tarea trivial en el iPhone, y los cargadores de Javascript te darán problemas, por lo que esta no es la respuesta perfecta, pero es lo mejor que sé.

0

Sé el delegado para la UIWebView, a continuación, interceptar la llamada:

– webView:shouldStartLoadWithRequest:navigationType: 

comprobar los valores de navigationType en la documentación. Creo que será mejor si devuelve NO en navigationType == UIWebViewNavigationTypeOther.

+0

webView: shouldStartLoadWithRequest: navigationType: recibe una llamada después de que se haya producido la descarga. – Harry

0

¿Esto hace que la página se cargue más rápido? Parece que las imágenes todavía se están descargando, pero simplemente no las estamos alimentando a UIWebView.

o ¿shouldStartLoadWithRequest acaba de cargar primero el texto HTML?

1

expandiendo la respuesta de Rob. Observé que cuando loadHTMLString: baseURL: y siempre devuelve NO, ese webView: shouldStartLoadWithRequest: navigationType: simplemente sigue recibiendo llamadas. (sospecho que loadHTMLString invoca otro shouldStartLoadWithRequest).

así que lo que tenía que hacer era volver alternan entre SI/NO y yo solía NSScanner para analizar el HTML y el cambio src = "http: // ..." para src = ""

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    if (pageHasNoImages==YES) 
    { 
     pageHasNoImages=FALSE; 
     return YES;  
    } 
    NSString* newHtml; 
    NSString* oldHtml; 
    NSData *urlData; 
    NSURLResponse *response; 
    NSError *error; 
    urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    oldHtml=[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 

    newHtml=[self.detail scannerReplaceImg:oldHtml]; // my own function to parse HTML 
    newHtml=[self.detail scannerReplaceAds:newHtml]; // my own function to parse HTML 
    if (newHtml==nil) 
    { 
     NSLog(@"newHtml is nil"); 
     newHtml=oldHtml; 
    } 
    [oldHtml release]; 

    pageHasNoImages=TRUE; 
    [web loadHTMLString:newHtml baseURL:request.URL]; 

    return NO; 
} 
Cuestiones relacionadas