Dapatkan URL UIWebView saat ini

110

Saya sudah mencoba mendapatkan URL saat saya UIWebViewdengan: webview.request.URL. Sayangnya NSURLitu kosong. Ada yang salah di sini? Saya bekerja dengan Xcode 3.2.2 beta 5.

Kode di atas harus dieksekusi di UIWebViewdelegasi didStartLoad.

danielreiser
sumber
Lakukan kode itu currentURL = currentWebView.request.URL.absoluteString; setelah tampilan web Anda dimuat, gunakan - (void) webViewDidFinishLoad: (UIWebView *) webView. Mungkin ini bisa membantu.
Xcoder
OP, mengingat pertanyaan ini memiliki 78k tampilan, pertanyaan ini cukup direferensikan. Maukah Anda memperbarui jawaban yang diterima menjadi jawaban yang lebih banyak dipilih untuk mencegah kebingungan di masa mendatang? Terima kasih!
Albert Renshaw

Jawaban:

45

Versi Matt jauh lebih bersih. Saya menyarankan semua orang untuk menggunakan yang satu itu daripada ini

Anda bisa mencoba ini:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];
Renger
sumber
Terima kasih. Kode saya di atas berfungsi ketika menjalankan di didFinishLoad .... Di suatu tempat saya telah membaca bahwa versi js tidak berfungsi di setiap halaman. Tapi saya akan mencoba.
danielreiser
11
Matt versinya jauh lebih bersih. Jadi ya, saya merekomendasikan semua orang untuk menggunakan yang itu daripada ini.
Rengers
1
Ini adalah satu-satunya cara kerjanya, misalnya di m.youtube.com. Semua jawaban lain mengembalikan URL yang salah.
cprcrack
2
Saya sebenarnya mengevaluasi "document.URL" dan bukan "window.location" (yang selalu kosong untuk saya). Ini berguna untuk penyesuaian internal pada URL halaman di situs JS yang berat yang mungkin tidak menggunakan pemuatan halaman biasa.
SmartyP
1
Kepada dua orang di atas - Aubada Taljo dan Taranfx - Rengers telah mencatat dengan cukup berani (secara harfiah, teksnya tebal) dan dengan rendah hati bahwa orang harus menggunakan versi Matt dengan lebih dari 230 suka di bawah ini. Jelas pada saat menjawab ini, ini berhasil dan diterima dan 30+ orang merasa itu berhasil juga. Ini sekarang berusia 5,5 tahun. Barang bagus, Rengers. Terima kasih telah mengarahkan orang-orang ke jawaban Matt di bawah ini.
Aplikasi Dev Guy
317

window.location melalui JS tidak berfungsi dengan andal untuk saya, tetapi ini berhasil:

currentURL = currentWebView.request.URL.absoluteString;

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

Matt Andersen
sumber
9
Anda akan mendapatkan url yang salah jika situs Anda memuat beberapa iklan di permintaan lain. Varian yang lebih jelas ditulis olehMark Sands
OdNairy
tidak berfungsi untuk hasil pencarian google. Saat mengakses hasil pencarian dari google itu menunjukkan saya URL google bukan url halaman hasil pencarian. Setiap bantuan .........
Nirav Gadhiya
@iOSDeveloper Google mungkin menggunakan status push "HTML5" untuk memanipulasi URL yang tidak melibatkan eksekusi permintaan lain (jadi currentWebView.request tidak diperbarui).
danw
3
Metode ini sepertinya tidak berfungsi jika situs web telah melakukan
riwayat. PushState
1
Di Swift 4: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff
55

berikut kode yang saya gunakan untuk mengambil url setiap kali Anda menavigasi ke tautan berbeda dalam tampilan web:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}
Mark Sands
sumber
ketika saya mencoba ini, metode ini tidak pernah dipanggil. Apakah ada sesuatu yang bisa saya lewatkan?
Greg
1
@greg pastikan Anda menetapkan diri Anda sebagai delegasi UIWebView
bendytree
1
ini bekerja untuk saya saat webView.request.URL.absoluteStringkembalinil
bendytree
Terima kasih, ini berhasil untuk saya juga dan ini lebih baik daripada currentWebView.request.URL.absoluteString;
hobbit web
36

Saya juga menemukan bahwa jawaban yang disetujui di atas tidak dapat diandalkan. Tetapi dengan sedikit modifikasi, sepertinya berfungsi setiap saat:

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

Perhatikan penambahan ".href" ke Javascript karena ini tersembunyi di akhir baris kode.

SarahR
sumber
2
Terima kasih SarahR, metode Anda berfungsi meskipun UIWebView memuat sebagian halaman.
Dmitry Makarenko
18

Ini tidak benar, dan akan mengembalikan nol:

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

Namun, kode di bawah ini bisa mendapatkan URL, tetapi url mungkin bukan URL saat ini:

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

Yang benar adalah:

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

}
sivasankar
sumber
4

Mencoba ini untuk hasil pencarian google di iPhone:

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

Keduanya mengembalikan string yang sama!

Alex Stone
sumber
3

di sini kode yang saya gunakan:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];
Bobj-C
sumber
5
Anda membuat NSURL dengan mendapatkan string dari NSURL yang ada; tidak bisakah kamu menyalin webView.request.URL?
Pascal
3

Karena UIWebView tidak digunakan lagi, untuk WKWebview mendapatkan url saat ini sangat sederhana.

webView.url
Kris Roofe
sumber
2

Saya menggunakan shouldStartLoadWithRequestacara (UIWebViewDelegate) untuk menangkap pembaruan URL. request.mainDocumentURL.absoluteStringakan memberi Anda URL halaman web utama (yang biasanya sesuai dengan keinginan Anda), sementara itu request.URL.absoluteStringakan menyertakan CSS dan JavaScript.

Tom Söderlund
sumber
2

Ini selalu berhasil. .

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

menerapkan metode delegasi,

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

URL adalah apa yang Anda butuhkan.

Gobi M
sumber
1

DI Swift coba ini,

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

Untuk mendapatkan URL WKWebView dan UIWebview saat ini

Ini kodenya.

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