2009-02-25 7 views

Répondre

4

UIWebView est une pâle, pauvre petite ombre de plein WebView de WebKit, pour lequel c'est facile. -webView:shouldStartLoadWithRequest:navigationType: est seulement appelé pour la navigation. Il n'est pas appelé pour toutes les demandes comme WebPolicyDelegate sur mac. Avec UIWebView, voici comment je voudrais attaquer ce problème:

Mettre en œuvre -webView:shouldStartLoadWithRequest:navigationType: et réglez-le pour toujours retourner NO. Mais vous devrez également prendre la demande et générer un NSURLConnection. Lorsque le NSURLConnection finit d'extraire les données, vous devez rechercher les balises IMG et les modifier dans l'espace réservé souhaité. Ensuite, vous allez charger la chaîne résultante dans le UIWebView en utilisant -loadHTMLString:baseURL:.

Bien sûr, l'analyse du code HTML n'est pas une tâche triviale sur iPhone, et les chargeurs Javascript vont vous causer des problèmes, donc ce n'est pas une réponse parfaite, mais c'est le meilleur que je connaisse.

0

le délégué du UIWebView, puis intercepter l'appel:

– webView:shouldStartLoadWithRequest:navigationType: 

Vérifiez les valeurs de NavigationType dans la documentation. Je crois que vous serez mieux servi en renvoyant NO sur navigationType == UIWebViewNavigationTypeOther.

+0

webView: shouldStartLoadWithRequest: navigationType: est appelé après le téléchargement. – Harry

0

Est-ce que cela provoque en fait le chargement plus rapide de la page? il semble que les images sont encore en cours de téléchargement, mais nous ne les fournissons pas à UIWebView.

ou est-ce que shouldStartLoadWithRequest suffit de charger le texte HTML en premier?

1

en expansion sur la réponse de Rob. J'ai remarqué que lorsque loadHTMLString: baseURL: et toujours renvoyant NO, ce webView: shouldStartLoadWithRequest: navigationType: continue à être appelé. (Je suppose que loadHTMLString invoque un autre shouldStartLoadWithRequest).

donc ce que je devais faire était autre entre le retour OUI/NON et moi NSScanner pour analyser le HTML et le changement src = "http: // ..." à 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; 
} 
Questions connexes