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.


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

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


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

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.


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

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

}

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!


3

di sini kode yang saya gunakan:

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

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

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.


2

Ini selalu berhasil. .

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

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.


1

DI Swift coba ini,

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

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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.