web-dev-qa-db-fra.com

Comment détecter une redirection dans un UIWebView

J'utilise UIWebView en tant que navigateur intégré dans mon application. Le problème que j'ai est de suivre l'URL qui devrait être affichée dans la barre d'URL.

Lorsque vous effectuez une recherche Google, la page de résultats génère souvent des liens tels que:

Equipe

Lorsque l'utilisateur clique sur ce lien, UIWebView signale d'abord ce lien, puis le lien redirigé dans shouldStartLoadWithRequest:navigationType:.

Comment savoir s'il s'agit d'une redirection, par opposition à un site supplémentaire chargé d'images ou d'autres éléments de la page? Dans l'état actuel des choses, ma barre d'URL affiche le lien long de Google dans l'exemple ci-dessus plutôt que de mettre à jour l'URL de Wikipedia.

21
zorro2b

Le mieux que vous puissiez faire est d’observer la méthode déléguée webView:shouldStartLoadWithRequest:navigationType:. Je suppose que les redirections relèvent de UIWebViewNavigationTypeOther

18
thelaws

Un peu tard maintenant mais j'utiliserais les méthodes webViewDidFinishLoad et webViewDidStartLoad delegate pour détecter les redirections comme suit:

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

    myRequestedUrl= [webView.request mainDocumentURL];
    NSLog(@"Requested url: %@", myRequestedUrl);    
}

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

    myLoadedUrl = [webView.request mainDocumentURL];
    NSLog(@"Loaded url: %@", myLoadedUrl);

   //psudocode
   if(myRequestedUrl is not the same as myLoadedUrl){
      doSomething
   }
}
7
PowerAktar

Je travaille sur ce même problème. À l’origine, j’ai suivi le conseil ici et utilisé maindocumenturl pour saisir manuellement les URL dans une liste d’historique pour la navigation en arrière/en avant. Cependant, cela n'a pas donné d'URL très précises, que vous ayez ou non l'URL de didstartload ou didfinishload. Si vous voulez ressentir ma douleur, essayez de naviguer dans une recherche google et vous verrez de quoi je parle, maindocumenturl est complètement inutile dans cet environnement. En revanche, la propriété absolue url utilisée avec webviewdidfinishload fonctionne beaucoup mieux et permet à l’utilisateur de créer un historique utilisable. C'est mes deux centimes.

1
user2104778