Güncel UIWebView URL'sini alın


110

Zaten mevcut URL'yi alma çalıştı UIWebViewile: webview.request.URL. Ne yazık ki NSURLboştu. Burada bir sorun mu var? Xcode 3.2.2 beta 5 ile çalışıyorum.

Yukarıdaki kod, UIWebViewtemsilcide çalıştırılmalıdır didStartLoad.


Bu kodu currentURL = currentWebView.request.URL.absoluteString yapın; web görünümünüz yüklendikten sonra - (void) webViewDidFinishLoad: (UIWebView *) webView kullanın. Belki bu yardımcı olabilir.
Xcoder

OP, bu sorunun 78k görüşe sahip olduğunu düşünürsek, oldukça iyi başvurulan bir soru. Gelecekte kafa karışıklığını önlemek için kabul edilen cevabı daha çok oy alan bir cevaba günceller misiniz? Teşekkürler!
Albert Renshaw

Yanıtlar:


45

Matt'in versiyonu çok daha temiz. Kullanmak herkese tavsiye o bunun yerine birini

Bunu deneyebilirsin:

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

Teşekkürler. Yukarıdaki kodum didFinishLoad'da çalıştırılırken çalışıyor .... Bir yerlerde js sürümünün her sayfada çalışmadığını okudum. Ama deneyeceğim.
danielreiser

11
Matt'in versiyonu çok daha temiz. Yani evet, herkese bunun yerine bunu kullanmasını tavsiye ederim.
Rengers

1
Örneğin m.youtube.com'da çalışmasının tek yolu budur. Diğer tüm yanıtlar yanlış URL'ler döndürür.
cprcrack

2
Aslında "document.URL" yi değerlendiriyorum, "window.location" değil (benim için her zaman boştu). Bu, geleneksel sayfa yüklemelerini kullanmayabilecek JS ağırlıklı sitelerde sayfa URL'sinde dahili ayarlamalar için kullanışlıdır.
SmartyP

1
Yukarıdaki iki kişiye - Aubada Taljo ve Taranfx - Rengers, oldukça cesurca (kelimenin tam anlamıyla, metin kalın) ve alçakgönüllülükle, insanların Matt'in aşağıda 230'dan fazla beğeni bulunan versiyonunu kullanmaları gerektiğini belirtti. Açıkçası, bunu cevaplarken işe yaradı ve kabul edildi ve 30+ kişi de işe yaradığını hissetti. Bu şimdi 5.5 yaşında. İyi şeyler, Rengers. İnsanları Matt'in aşağıdaki cevabına yönlendirdiğiniz için teşekkürler.
App Dev Guy

317

JS üzerinden window.location benim için güvenilir bir şekilde çalışmadı, ancak bu işe yaradı:

currentURL = currentWebView.request.URL.absoluteString;

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


9
Siteniz başka bir istekte bazı reklamlar yüklerse, yanlış url alırsınız. Mark Sands
Yazan

google'ın arama sonuçları için çalışmaz. Google'dan arama sonuçlarına erişirken bana arama sonucu sayfası url'si değil google URL'si gösteriyor. Herhangi bir yardım .........
Nirav Gadhiya

@iOSDeveloper Google, başka bir isteği yürütmeyi gerektirmeyen URL'yi değiştirmek için muhtemelen "HTML5" aktarma durumunu kullanır (bu nedenle, currentWebView.request güncellenmez).
danw

3
Web sitesi bir history.pushState
yaptıysa

1
Swift 4'te: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff

55

İşte web görünümünde farklı bir bağlantıya her gittiğinizde url'yi almak için kullandığım kod:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}

bunu denediğimde, yöntem asla çağrılmaz. Eksik olabileceğim bir şey var mı?
Greg

1
@greg Kendinizi UIWebView temsilcisi olarak ayarladığınızdan emin olun
bendytree

1
bu benim için webView.request.URL.absoluteStringdöndü dönerken çalıştınil
bendytree

Teşekkürler, bu benim için de çalıştı ve currentWebView.request.URL.absoluteString'den daha iyi;
web hobbit

36

Ben de yukarıdaki onaylanmış cevabın güvenilir olmadığını buldum. Ancak küçük bir değişiklikle her seferinde işe yarıyor gibi görünüyor:

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

Kod satırının sonunda gizlendiğinden Javascript'e ".href" eklendiğine dikkat edin.


2
Teşekkürler SarahR, UIWebView bir sayfayı kısmen yüklese bile yönteminiz çalışır.
Dmitry Makarenko

18

Bu doğru değil ve sıfır döndürür:

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

Ancak, aşağıdaki kod bir URL alabilir, ancak url mevcut URL olmayabilir:

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

Doğru olan:

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

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

}

4

Bunu iPhone'daki google arama sonuçları için denedim:

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

Her ikisi de aynı dizeyi döndürür!


3

İşte kullandığım kod:

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

5
Dizeyi mevcut bir NSURL'den alarak bir NSURL oluşturuyorsunuz; sadece kopyalayamaz webView.request.URLmısın?
Pascal


2

shouldStartLoadWithRequestURL güncellemelerini yakalamak için olayı (UIWebViewDelegate) kullanıyorum. request.mainDocumentURL.absoluteStringsize ana web sayfasının URL'sini (normalde istediğiniz şeydir) alırken request.URL.absoluteString, CSS ve JavaScript içerir.


2

Bu her zaman işe yarar. .

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

2

temsilci yöntemini uygulamak,

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

URL, tam olarak ihtiyacınız olan şeydir.


1

IN Swift , bu deneyin

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

1

WKWebView ve UIWebview'un güncel URL'sini almak için

İşte kod.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.