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.

Danielreiser
la source
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"];
Rengers
la source
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

Matt Andersen
la source
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;
}
Mark Sands
la source
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.

SarahR
la source
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"];
DD
la source
8
- (void)webViewDidFinishLoad:(UIWebView *)webView{
     NSURL *currentURL = [[webView request] URL];
     NSLog(@"%@",[currentURL description]);

}
sivasankar
la source
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!

Alex Stone
la source
3

voici le code que j'utilise:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];
Bobj-C
la source
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
3

Comme UIWebView est obsolète, pour WKWebview obtenir l'URL actuelle est très simple.

webView.url
Kris Roofe
la source
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.

Tom Söderlund
la source
2

Cela fonctionne toujours. .

NSString* url= [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];
Shaik Riyaz
la source
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.

Gobi M
la source
1

IN Swift essayez ceci,

func webViewDidFinishLoad(webView: UIWebView){
    println(WebView.request?.mainDocumentURL)
}
Mohammad Zaid Pathan
la source
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;
}
Staline Pusparaj
la source