Comment détecter la redirection dans un UIWebView

J'utilise un UIWebView en tant que browser embedded dans mon application. Le problème que j'ai est le suivi de l'URL qui devrait être affichée dans la barre d'URL.

Lorsque vous effectuez une search Google, la page de résultats génère souvent des liens comme celui-ci:

http://www.google.com/url?sa=t&source=web&cd=1&ved=0CC4QFjAA&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FDog&rct=j&q=dogs&ei=27XeTc6RFIWEvAO858DHBQ&usg=AFQjCNGkEDcWzea4pSlurHhcuQfqFcp_pw

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

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

Le mieux que vous puissiez faire est d'observer webView:shouldStartLoadWithRequest:navigationType: delegate method. Je suppose que les redirections tombent sous UIWebViewNavigationTypeOther .

Un peu en retard maintenant, mais j'utiliserais webViewDidFinishLoad et les methods déléguées webViewDidStartLoad 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 } } 

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