Nhận URL hiện tại của UIWebView


110

Tôi đã cố gắng lấy URL hiện tại của tôi UIWebViewvới: webview.request.URL. Thật không may NSURLlà đã trống. Có gì sai ở đây không? Tôi đang làm việc với Xcode 3.2.2 beta 5.

Đoạn mã trên phải được thực thi trong UIWebViewủy quyền didStartLoad.


Làm điều đó mã currentURL = currentWebView.request.URL.absoluteString; sau khi chế độ xem web của bạn tải, hãy sử dụng - (void) webViewDidFinishLoad: (UIWebView *) webView. Có lẽ điều này có thể hữu ích.
Xcoder

OP, xem xét câu hỏi này có 78 nghìn lượt xem, đây là một câu hỏi được tham khảo khá tốt. Bạn có phiền cập nhật câu trả lời được chấp nhận cho câu trả lời được nhiều người bình chọn hơn để tránh nhầm lẫn trong tương lai không? Cảm ơn!
Albert Renshaw

Câu trả lời:


45

Phiên bản của Matt sạch hơn nhiều. Tôi khuyên mọi người sử dụng rằng một thay vì điều này

Bạn có thể thử điều này:

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

Cảm ơn. Đoạn mã của tôi ở trên hoạt động khi thực thi trong didFinishLoad .... Ở đâu đó tôi đã đọc rằng phiên bản js không hoạt động trên mọi trang. Nhưng tôi sẽ cố gắng.
danielreiser

11
Matt phiên bản của anh ấy sạch sẽ hơn nhiều. Vì vậy, tôi khuyên mọi người nên sử dụng cái đó thay vì cái này.
Rengers

1
Đây là cách duy nhất nó hoạt động, chẳng hạn như trong m.youtube.com. Tất cả các câu trả lời khác trả về URL sai.
cprcrack

2
Tôi thực sự đánh giá "document.URL" chứ không phải "window.location" (đối với tôi luôn để trống). Điều này hữu ích cho các điều chỉnh nội bộ đối với URL trang trên các trang web nặng JS có thể không sử dụng tải trang truyền thống.
SmartyP

1
Đối với hai người ở trên - Aubada Taljo và Taranfx - Rengers đã ghi chú khá táo bạo (theo nghĩa đen là chữ in đậm) và khiêm tốn rằng mọi người nên sử dụng phiên bản của Matt với hơn 230 lượt thích ở bên dưới. Rõ ràng tại thời điểm trả lời câu hỏi này, nó đã hoạt động và được chấp nhận và hơn 30 người cũng cảm thấy nó hoạt động. Bây giờ là 5,5 năm tuổi. Tốt lắm, Rengers. Cảm ơn vì đã chỉ cho mọi người câu trả lời của Matt bên dưới.
App Dev Guy,

317

window.location qua JS không hoạt động đáng tin cậy đối với tôi, nhưng điều này đã làm được:

currentURL = currentWebView.request.URL.absoluteString;

Tín dụng: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html


9
Bạn sẽ nhận được url không chính xác nếu trang web của bạn tải một số quảng cáo theo yêu cầu khác. Biến thể rõ ràng hơn được viết bởiMark Sands
OdNairy

không hoạt động đối với kết quả tìm kiếm của google. Trong khi truy cập kết quả tìm kiếm từ google, nó đang hiển thị cho tôi URL google không phải url trang kết quả tìm kiếm. Bất kỳ sự giúp đỡ .........
Nirav Gadhiya

@iOSDeveloper Google có thể sử dụng trạng thái đẩy "HTML5" để thao tác URL không liên quan đến việc thực hiện một yêu cầu khác (vì vậy currentWebView.request không được cập nhật).
danw

3
Phương pháp này dường như không hoạt động nếu trang web đã thực hiện history.pushState
andrrs

1
Trong Swift 4: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff

55

đây là mã tôi sử dụng để lấy url mỗi khi bạn điều hướng đến một liên kết khác trong chế độ xem web:

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

khi tôi thử điều này, phương thức không bao giờ được gọi. Có điều gì tôi có thể bị thiếu?
Greg

1
@ Greg hãy chắc chắn rằng bạn thiết lập mình như đại biểu của UIWebView
bendytree

1
điều này đã làm việc cho tôi trong khi webView.request.URL.absoluteStringquay trở lạinil
bentytree

Cảm ơn, điều này cũng hiệu quả với tôi và nó tốt hơn currentWebView.request.URL.absoluteString;
web hobbit

36

Tôi cũng thấy rằng câu trả lời đã được phê duyệt ở trên không đáng tin cậy. Nhưng với một chút sửa đổi, nó dường như hoạt động mọi lúc:

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

Lưu ý thêm ".href" vào Javascript vì nó bị ẩn ở cuối dòng mã.


2
Cảm ơn SarahR, phương pháp của bạn hoạt động ngay cả khi UIWebView chỉ tải một phần trang.
Dmitry Makarenko 19/12/12

18

Điều này không chính xác và sẽ trả về nil:

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

Tuy nhiên, mã bên dưới có thể nhận được một URL, nhưng url có thể không phải là URL hiện tại:

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

Câu đúng là:

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

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

}

4

Đã thử điều này cho kết quả tìm kiếm của google trên iPhone:

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

Cả hai đều trả về cùng một chuỗi!


3

đây là mã tôi sử dụng:

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

5
Bạn đang tạo một NSURL bằng cách lấy chuỗi từ một NSURL hiện có; bạn không thể chỉ sao chép webView.request.URL?
Pascal

3

Vì UIWebView không được dùng nữa nên để WKWebview lấy được url hiện tại rất đơn giản.

webView.url

2

Tôi sử dụng shouldStartLoadWithRequestsự kiện (UIWebViewDelegate) để cập nhật URL. request.mainDocumentURL.absoluteStringsẽ cung cấp cho bạn URL của trang web chính (thường là những gì bạn muốn), trong khi request.URL.absoluteStringsẽ bao gồm CSS và JavaScript bao gồm.


2

Điều này luôn hoạt động. .

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

2

triển khai phương pháp ủy quyền,

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

URL là những gì bạn cần chính xác.


1

TRONG Swift hãy thử cái này,

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

1

Để nhận URL hiện tại của WKWebView và UIWebview

Đây là mã.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.