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.


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"];

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


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;
}

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.


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"];

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

}

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!


3

hier der Code, den ich benutze:

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

5
Sie erstellen eine NSURL, indem Sie die Zeichenfolge aus einer vorhandenen NSURL abrufen. Könntest du nicht einfach kopieren webView.request.URL?
Pascal


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.


2

Das funktioniert immer. .

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

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.


1

IN Swift versuchen Sie dies,

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

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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.