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.


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

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


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

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.


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

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

}

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!


3

tutaj kod, którego używam:

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

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.


2

To zawsze działa. .

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

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.



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;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.