Aktuelle URL von UIWebView abrufen

110

Ich habe bereits versucht, die aktuelle URL von mir UIWebViewmit zu erhalten : webview.request.URL. Leider NSURLwar das leer. Stimmt hier etwas nicht? Ich arbeite mit Xcode 3.2.2 Beta 5.

Der obige Code sollte im UIWebViewDelegaten ausgeführt werden didStartLoad.

Danielreiser
quelle
Führen Sie diesen Code aus currentURL = currentWebView.request.URL.absoluteString; Verwenden Sie nach dem Laden Ihrer Webansicht - (void) webViewDidFinishLoad: (UIWebView *) webView. Vielleicht kann das helfen.
Xcoder
OP, wenn man bedenkt, dass diese Frage 78.000 Aufrufe hat, ist sie ziemlich gut referenziert. Würde es Ihnen etwas ausmachen, die akzeptierte Antwort auf die stärker hochgestimmte zu aktualisieren, um zukünftige Verwirrung zu vermeiden? Vielen Dank!
Albert Renshaw

Antworten:

45

Matts Version ist viel sauberer. Ich empfehle jedem, diesen stattdessen zu verwenden

Sie könnten dies versuchen:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];
Rengers
quelle
Vielen Dank. Mein obiger Code funktioniert bei der Ausführung in didFinishLoad .... Irgendwo habe ich gelesen, dass die js-Version nicht auf jeder Seite funktioniert. Aber ich werde es versuchen.
Danielreiser
11
Matt seine Version ist viel sauberer. Also ja, ich empfehle jedem, diesen stattdessen zu verwenden.
Rengers
1
Dies ist die einzige Möglichkeit, die beispielsweise in m.youtube.com funktioniert. Alle anderen Antworten geben falsche URLs zurück.
Cprcrack
2
Ich bewerte tatsächlich "document.URL" und nicht "window.location" (was für mich immer leer war). Dies ist nützlich für interne Anpassungen der Seiten-URL auf JS-Websites, auf denen möglicherweise keine herkömmlichen Seitenladevorgänge verwendet werden.
SmartyP
1
Für die beiden oben genannten Personen - Aubada Taljo und Taranfx - hat Rengers ziemlich kühn (wörtlich, der Text ist fett) und demütig angemerkt, dass die Leute Matts Version mit mehr als 230 Likes verwenden sollten. Zum Zeitpunkt der Beantwortung dieser Frage funktionierte es eindeutig und wurde akzeptiert, und über 30 Personen waren der Meinung, dass es auch funktionierte. Das ist jetzt 5,5 Jahre alt. Gutes Zeug, Rengers. Vielen Dank, dass Sie die Leute auf Matts Antwort unten hingewiesen haben.
App Dev Guy
317

window.location via JS hat bei mir nicht zuverlässig funktioniert, aber das hat funktioniert:

currentURL = currentWebView.request.URL.absoluteString;

Bildnachweis: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html

Matt Andersen
quelle
9
Sie erhalten eine falsche URL, wenn Ihre Website einige Anzeigen in einer anderen Anfrage lädt. Mark Sands
Klarere
funktioniert nicht für Suchergebnisse von Google. Beim Zugriff auf Suchergebnisse von Google wird mir die Google-URL und nicht die URL der Suchergebnisseite angezeigt. Jede Hilfe .........
Nirav Gadhiya
@iOSDeveloper Google verwendet wahrscheinlich den Push-Status "HTML5", um die URL zu bearbeiten, bei der keine weitere Anforderung ausgeführt wird (daher wird currentWebView.request nicht aktualisiert).
Danw
3
Diese Methode scheint nicht zu funktionieren, wenn die Website einen history.pushState
andrrs erstellt hat
1
In Swift 4: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff
55

Hier ist der Code, mit dem ich die URL jedes Mal abrufe, wenn Sie zu einem anderen Link in der Webansicht navigieren:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}
Mark Sands
quelle
Wenn ich das versuche, wird die Methode nie aufgerufen. Gibt es etwas, das mir fehlen könnte?
Greg
1
@greg stellen Sie sicher, dass Sie sich als Delegierter von
UIWebView
1
Dies funktionierte für mich bei meiner webView.request.URL.absoluteStringRückkehrnil
Bendytree
Danke, das hat auch bei mir funktioniert und ist besser als currentWebView.request.URL.absoluteString;
Web-Hobbit
36

Ich fand auch, dass die oben genehmigte Antwort nicht zuverlässig war. Aber mit einer kleinen Modifikation scheint es jedes Mal zu funktionieren:

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

Beachten Sie das Hinzufügen von ".href" zum Javascript, da dies am Ende der Codezeile ausgeblendet ist.

SarahR
quelle
2
Dank SarahR funktioniert Ihre Methode auch dann, wenn UIWebView eine Seite nur teilweise geladen hat.
Dmitry Makarenko
18

Dies ist nicht korrekt und gibt eine Null zurück:

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

Der folgende Code kann jedoch eine URL erhalten, die URL ist jedoch möglicherweise nicht die aktuelle URL:

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

Das Richtige ist:

NSString *currentURL = [_webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];
DD
quelle
8
- (void)webViewDidFinishLoad:(UIWebView *)webView{
     NSURL *currentURL = [[webView request] URL];
     NSLog(@"%@",[currentURL description]);

}
Sivasankar
quelle
4

Versuchte dies für Google-Suchergebnisse auf dem iPhone:

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

Beide geben den gleichen String zurück!

Alex Stone
quelle
3

hier der Code, den ich benutze:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];
Bobj-C
quelle
5
Sie erstellen eine NSURL, indem Sie die Zeichenfolge aus einer vorhandenen NSURL abrufen. Könntest du nicht einfach kopieren webView.request.URL?
Pascal
3

Da UIWebView veraltet ist, ist es für WKWebview sehr einfach, die aktuelle URL abzurufen .

webView.url
Kris Roofe
quelle
2

Ich benutze das shouldStartLoadWithRequestEreignis (UIWebViewDelegate), um URL-Updates abzufangen. request.mainDocumentURL.absoluteStringSie erhalten die URL der Hauptwebseite (die normalerweise gewünscht wird), während request.URL.absoluteStringCSS und JavaScript enthalten sind.

Tom Söderlund
quelle
2

Das funktioniert immer. .

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

Delegate-Methode implementieren,

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

URL ist genau das, was Sie brauchen.

Gobi M.
quelle
1

IN Swift versuchen Sie dies,

func webViewDidFinishLoad(webView: UIWebView){
    println(WebView.request?.mainDocumentURL)
}
Mohammad Zaid Pathan
quelle
1

Um die aktuelle URL von WKWebView und UIWebview abzurufen

Hier ist der Code.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
Stalin Pusparaj
quelle