Pobierz aktualny adres URL UIWebView

110

Próbowałem już coraz aktualny adres URL mojej UIWebViewz: webview.request.URL. Niestety NSURLbył pusty. Coś tu nie tak? Pracuję z Xcode 3.2.2 beta 5.

Powyższy kod powinien zostać wykonany w UIWebViewdelegacie didStartLoad.

danielreiser
źródło
Zrób ten kod currentURL = currentWebView.request.URL.absoluteString; po załadowaniu widoku sieci Web, więc użyj - (void) webViewDidFinishLoad: (UIWebView *) webView. Może to pomoże.
Xcoder
OP, biorąc pod uwagę, że to pytanie ma 78 tys. Wyświetleń, jest całkiem dobrze przywoływane. Czy mógłbyś zaktualizować zaakceptowaną odpowiedź na zdecydowanie bardziej pozytywną, aby zapobiec przyszłym nieporozumieniom? Dzięki!
Albert Renshaw,

Odpowiedzi:

45

Wersja Matt jest znacznie czystszy. Zalecam wszystkim używanie tego zamiast tego

Możesz spróbować tego:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];
Rengers
źródło
Dzięki. Mój kod powyżej działa podczas wykonywania w didFinishLoad .... Gdzieś przeczytałem, że wersja js nie działa na każdej stronie. Ale spróbuję.
danielreiser
11
Matt jego wersja jest znacznie czystsza. Więc tak, polecam wszystkim używanie tego zamiast tego.
Rengers
1
Tylko w ten sposób działa na przykład na m.youtube.com. Wszystkie inne odpowiedzi zwracają nieprawidłowe adresy URL.
cprcrack
2
W rzeczywistości oceniam „document.URL”, a nie „window.location” (które zawsze było puste). Jest to przydatne do wewnętrznych dostosowań adresu URL strony w witrynach z dużą ilością kodu JS, które mogą nie używać tradycyjnego ładowania stron.
SmartyP,
1
Dwie osoby powyżej - Aubada Taljo i Taranfx - Rengers zauważyli dość odważnie (dosłownie tekst jest pogrubiony) i pokornie, że ludzie powinni używać wersji Matta z ponad 230 polubieniami poniżej. Najwyraźniej w chwili udzielenia odpowiedzi zadziałało i zostało zaakceptowane, a ponad 30 osób uznało, że też działa. To ma teraz 5,5 roku. Dobra rzecz, Rengers. Dzięki za wskazanie ludziom odpowiedzi Matta poniżej.
App Dev Guy
317

window.location przez JS nie działało dla mnie niezawodnie, ale to:

currentURL = currentWebView.request.URL.absoluteString;

Źródło: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html

Matt Andersen
źródło
9
Otrzymasz niepoprawny adres URL, jeśli witryna wczyta niektóre reklamy w innym żądaniu. Bardziej przejrzysty wariant napisany przezMark Sands
OdNairy
nie działa dla wyników wyszukiwania google. Podczas uzyskiwania dostępu do wyników wyszukiwania z google pokazuje mi adres URL google, a nie adres strony wyników wyszukiwania. Jakakolwiek pomoc .........
Nirav Gadhiya,
@iOSDeveloper Google prawdopodobnie używa stanu push „HTML5” do manipulowania adresem URL, który nie obejmuje wykonywania innego żądania (więc currentWebView.request nie jest aktualizowany).
danw
3
Ta metoda wydaje się nie działać, jeśli witryna zrobiła historię.pushState
andrrs
1
W Swift 4: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff
55

oto kod, którego używam do pobierania adresu URL za każdym razem, gdy przechodzisz do innego linku w widoku internetowym:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}
Mark Sands
źródło
kiedy próbuję tego, metoda nigdy nie jest wywoływana. Czy jest coś, czego mógłbym przegapić?
Greg,
1
@greg upewnij się, że ustawiłeś się jako delegat UIWebView
bendytree
1
to działało dla mnie po webView.request.URL.absoluteStringpowrocienil
bendytree
Dzięki, to też zadziałało i jest lepsze niż currentWebView.request.URL.absoluteString;
web hobbit
36

Ja również stwierdziłem, że zatwierdzona powyżej odpowiedź nie była wiarygodna. Ale z niewielką modyfikacją wydaje się działać za każdym razem:

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

Zwróć uwagę na dodanie „.href” do skryptu JavaScript, ponieważ jest on ukryty na końcu wiersza kodu.

SarahR
źródło
2
Dzięki SarahR, twoja metoda działa nawet wtedy, gdy UIWebView załadował stronę tylko częściowo.
Dmitry Makarenko
18

To nie jest poprawne i zwróci zero:

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

Jednak poniższy kod może uzyskać adres URL, ale URL może nie być aktualnym adresem URL:

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

Prawidłowy to:

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

}
sivasankar
źródło
4

Próbowałem tego dla wyników wyszukiwania Google na iPhonie:

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

Obie zwracają ten sam ciąg!

Alex Stone
źródło
3

tutaj kod, którego używam:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];
Bobj-C
źródło
5
Tworzysz identyfikator NSURL, pobierając ciąg z istniejącego adresu NSURL; nie mógłbyś po prostu skopiować webView.request.URL?
Pascal,
2

Używam shouldStartLoadWithRequestzdarzenia (UIWebViewDelegate) do przechwytywania aktualizacji adresów URL. request.mainDocumentURL.absoluteStringdostaniesz adres URL głównej strony internetowej (który zwykle jest tym, czego chcesz), a jednocześnie request.URL.absoluteStringzawiera CSS i JavaScript.

Tom Söderlund
źródło
2

To zawsze działa. .

NSString* url= [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];
Shaik Riyaz
źródło
2

wdrożyć metodę delegata,

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

URL to dokładnie to, czego potrzebujesz.

Gobi M
źródło
1

W Szybko spróbuj tego,

func webViewDidFinishLoad(webView: UIWebView){
    println(WebView.request?.mainDocumentURL)
}
Mohammad Zaid Pathan
źródło
1

Aby uzyskać aktualny adres URL WKWebView i UIWebview

Oto kod.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
Stalin Pusparaj
źródło