Obtenir l'URL actuelle de UIWebView


110

Je l' ai déjà essayé d' obtenir l'URL actuelle de mon UIWebViewavec: webview.request.URL. Malheureusement, NSURLc'était vide. Quelque chose ne va pas ici? Je travaille avec Xcode 3.2.2 beta 5.

Le code ci-dessus doit être exécuté dans le UIWebViewdélégué didStartLoad.


Faites ce code currentURL = currentWebView.request.URL.absoluteString; après le chargement de votre vue Web, utilisez - (void) webViewDidFinishLoad: (UIWebView *) webView. Peut-être que cela peut aider.
Xcoder

OP, étant donné que cette question a 78k vues, elle est plutôt bien référencée. Cela vous dérangerait-il de mettre à jour la réponse acceptée par celle qui a été fortement votée pour éviter toute confusion future? Merci!
Albert Renshaw

Réponses:


45

La version de Matt est beaucoup plus propre. Je recommande à tout le monde d'utiliser celui- là au lieu de celui-ci

Vous pouvez essayer ceci:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

Merci. Mon code ci-dessus fonctionne lors de l'exécution dans didFinishLoad .... Quelque part, j'ai lu que la version js ne fonctionne pas sur toutes les pages. Mais j'essayerai.
danielreiser

11
Matt sa version est beaucoup plus propre. Alors oui, je recommande à tout le monde d'utiliser celui-là au lieu de celui-ci.
Rengers

1
C'est la seule façon dont cela fonctionne par exemple sur m.youtube.com. Toutes les autres réponses renvoient de mauvaises URL.
cprcrack

2
J'évalue en fait "document.URL" et non "window.location" (qui était toujours vide pour moi). Ceci est utile pour les ajustements internes de l'URL de la page sur les sites lourds JS qui pourraient ne pas utiliser les chargements de page traditionnels.
SmartyP

1
Aux deux personnes ci-dessus - Aubada Taljo et Taranfx - Rengers a noté assez hardiment (littéralement, le texte est en gras) et humblement que les gens devraient utiliser la version de Matt avec plus de 230 likes ci-dessous. De toute évidence, au moment de répondre à cette question, cela a fonctionné et a été accepté et plus de 30 personnes ont estimé que cela fonctionnait aussi. Il a maintenant 5,5 ans. Du bon matos, Rengers. Merci d'avoir indiqué aux gens la réponse de Matt ci-dessous.
App Dev Guy

317

window.location via JS ne fonctionnait pas de manière fiable pour moi, mais cela a fonctionné:

currentURL = currentWebView.request.URL.absoluteString;

Crédit: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html


9
Vous obtiendrez une URL incorrecte si votre site charge des annonces dans une autre demande. Variante plus claire écrite parMark Sands
OdNairy

ne fonctionne pas pour les résultats de recherche de google. Lors de l'accès aux résultats de recherche à partir de Google, il me montre l'URL de Google et non l'URL de la page de résultats de recherche. Toute aide .........
Nirav Gadhiya

@iOSDeveloper Google utilise probablement l'état push "HTML5" pour manipuler l'URL, ce qui n'implique pas d'exécuter une autre requête (donc currentWebView.request n'est pas mis à jour).
danw

3
Cette méthode ne semble pas fonctionner si le site Web a effectué un
historique.pushState

1
Dans Swift 4: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff

55

voici le code que j'utilise pour saisir l'URL chaque fois que vous accédez à un lien différent dans la vue Web:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}

quand j'essaye ceci, la méthode n'est jamais appelée. Y a-t-il quelque chose que je pourrais manquer?
Greg

1
@greg assurez-vous de vous définir comme le délégué de UIWebView
bendytree

1
cela a fonctionné pour moi pendant mon webView.request.URL.absoluteStringretournil
bendytree

Merci, cela a fonctionné pour moi aussi et c'est mieux que currentWebView.request.URL.absoluteString;
web hobbit

36

J'ai moi aussi trouvé que la réponse approuvée ci-dessus n'était pas fiable. Mais avec une légère modification, cela semble fonctionner à chaque fois:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

Notez l'ajout de ".href" au Javascript car il est caché à la fin de la ligne de code.


2
Merci SarahR, votre méthode fonctionne même si UIWebView n'a chargé une page que partiellement.
Dmitry Makarenko

18

Ce n'est pas correct et retournera un nul:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

Cependant, le code ci-dessous peut obtenir une URL, mais l'URL peut ne pas être l'URL actuelle:

NSString *url = _webView.request.URL.absoluteString;

La bonne est:

NSString *currentURL = [_webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

8
- (void)webViewDidFinishLoad:(UIWebView *)webView{
     NSURL *currentURL = [[webView request] URL];
     NSLog(@"%@",[currentURL description]);

}

4

J'ai essayé ceci pour les résultats de recherche Google sur iPhone:

 NSString* currentURL = webView.request.URL.absoluteString;
 NSString* mainDocumentURL = webView.request.mainDocumentURL.absoluteString;

Les deux renvoient la même chaîne!


3

voici le code que j'utilise:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];

5
Vous créez une NSURL en obtenant la chaîne d'une NSURL existante; ne pouvez-vous pas simplement copier webView.request.URL?
Pascal


2

J'utilise l' shouldStartLoadWithRequestévénement (UIWebViewDelegate) pour attraper les mises à jour d'URL. request.mainDocumentURL.absoluteStringvous obtiendrez l'URL de la page Web principale (qui est normalement ce que vous voulez), tout request.URL.absoluteStringen incluant CSS et JavaScript inclus.


2

Cela fonctionne toujours. .

NSString* url= [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

2

implémenter la méthode déléguée,

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString  *URL = request.URL.absoluteString;    NSLog(@"%@",URL);
}

L'URL est exactement ce dont vous aviez besoin.


1

IN Swift essayez ceci,

func webViewDidFinishLoad(webView: UIWebView){
    println(WebView.request?.mainDocumentURL)
}

1

Pour obtenir l'URL actuelle de WKWebView et UIWebview

Voici le code.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.