UIWebView의 현재 URL 가져 오기


110

난 이미 내 현재의 URL 점점 시도 UIWebView와를 : webview.request.URL. 불행히도 NSURL비어있었습니다. 여기에 문제가 있습니까? Xcode 3.2.2 베타 5로 작업하고 있습니다.

위의 코드는 UIWebView델리게이트 에서 실행되어야합니다 didStartLoad.


해당 코드를 수행하십시오. currentURL = currentWebView.request.URL.absoluteString; 웹보기가로드 된 후-(void) webViewDidFinishLoad : (UIWebView *) webView를 사용합니다. 아마도 이것이 도움이 될 것입니다.
Xcoder 2014 년

OP,이 질문에 78k 뷰가 있다는 점을 고려하면 꽤 잘 참조 된 것입니다. 미래의 혼란을 방지하기 위해 더 많이 찬성 된 답변에 대한 수락 된 답변을 업데이트 하시겠습니까? 감사!
Albert Renshaw

답변:


45

Matt의 버전 은 훨씬 깨끗합니다. 나는 모두가 이것을 대신 사용 하도록 권장 합니다.

이것을 시도해 볼 수 있습니다.

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

감사. 위의 코드는 didFinishLoad에서 실행할 때 작동합니다 .... 어딘가에서 js 버전이 모든 페이지에서 작동하지 않는다는 것을 읽었습니다. 그러나 나는 시도 할 것이다.
danielreiser

11
Matt 그의 버전은 훨씬 깨끗합니다. 그래서 나는 모두가 이것을 대신 사용하도록 권장합니다.
Rengers

1
예를 들어 m.youtube.com에서 이것이 작동하는 유일한 방법입니다. 다른 모든 답변은 잘못된 URL을 반환합니다.
cprcrack

2
나는 실제로 "window.location"이 아니라 "document.URL"을 평가합니다 (항상 비어 있음). 이는 기존 페이지로드를 사용하지 않을 수있는 JS가 많은 사이트의 페이지 URL에 대한 내부 조정에 유용합니다.
SmartyP 2014 년

1
위의 두 사람-Aubada Taljo와 Taranfx-Rengers는 상당히 대담하게 (문자 그대로 텍스트가 굵게 표시됨) 겸손하게 사람들이 아래에 230 개 이상의 좋아요가있는 Matt의 버전을 사용해야한다고 언급했습니다. 이 질문에 답했을 때 분명히 효과가 있었고 받아 들여졌고 30 명 이상의 사람들도 효과가 있다고 느꼈습니다. 이제 5.5 년이되었습니다. 좋은 물건, Rengers. 사람들에게 아래 Matt의 답변을 알려 주셔서 감사합니다.
App Dev Guy

317

JS를 통한 window.location은 나를 위해 안정적으로 작동하지 않았지만 다음과 같이 작동했습니다.

currentURL = currentWebView.request.URL.absoluteString;

크레딧 : http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html


9
사이트가 다른 요청에서 일부 광고를로드 할 경우 잘못된 URL이 표시됩니다. 더 명확 변형에 의해 작성Mark Sands
OdNairy

Google의 검색 결과에는 작동하지 않습니다. Google에서 검색 결과에 액세스하는 동안 검색 결과 페이지 URL이 아닌 Google URL이 표시됩니다. 어떤 도움 .........
Nirav Gadhiya

@iOSDeveloper Google은 아마도 "HTML5"푸시 상태를 사용하여 다른 요청을 실행하지 않는 URL을 조작합니다 (따라서 currentWebView.request가 업데이트되지 않음).
danw

3
이 방법은 웹 사이트가 history.pushState를 수행 한 경우 작동하지 않는 것 같습니다.
andrrs

1
Swift 4 : webView.request? .mainDocumentURL? .absoluteString
DmitryKanunnikoff

55

다음은 webview 내에서 다른 링크로 이동할 때마다 URL을 가져 오는 데 사용하는 코드입니다.

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

이것을 시도하면 메서드가 호출되지 않습니다. 내가 놓칠 수있는 것이 있습니까?
Greg

1
@greg 확실히 당신은있는 UIWebView의 대리인으로 자신을 설정 만든다
bendytree

1
동안이 나를 위해 일 webView.request.URL.absoluteString반환nil
bendytree

고마워, 이것은 나에게도 효과가 있었고 currentWebView.request.URL.absoluteString보다 낫습니다.
웹 호빗

36

나도 위의 승인 된 답변이 신뢰할 수 없음을 발견했습니다. 그러나 약간의 수정으로 매번 작동하는 것 같습니다.

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

Javascript에 ".href"가 추가 된 점에 유의하십시오. 이것은 코드 줄의 끝에 숨겨져 있습니다.


2
감사합니다 SarahR, UIWebView가 페이지를 부분적으로로드 한 경우에도 메소드가 작동합니다.
Dmitry Makarenko

18

이것은 올바르지 않으며 nil을 반환합니다.

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

그러나 아래 코드는 URL을 가져올 수 있지만 URL은 현재 URL이 아닐 수 있습니다.

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

올바른 것은 다음과 같습니다.

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

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

}

4

iPhone의 Google 검색 결과에 대해 이것을 시도했습니다.

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

둘 다 동일한 문자열을 반환합니다!


3

여기에 내가 사용하는 코드 :

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

5
기존 NSURL에서 문자열을 가져 와서 NSURL을 작성합니다. 그냥 복사 할 수 webView.request.URL없나요?
Pascal

3

UIWebView가 더 이상 사용되지 않으므로 WKWebview 가 현재 URL을 가져 오는 것은 매우 간단합니다.

webView.url

2

shouldStartLoadWithRequestURL 업데이트를 잡기 위해 이벤트 (UIWebViewDelegate)를 사용 합니다. request.mainDocumentURL.absoluteString기본 웹 페이지의 URL (일반적으로 원하는 URL)을 가져 request.URL.absoluteString오며 CSS 및 JavaScript 포함을 포함합니다.


2

이것은 항상 작동합니다. .

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

2

위임 메서드 구현,

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

URL은 정확히 필요한 것입니다.



1

WKWebView 및 UIWebview의 현재 URL을 얻으려면

다음은 코드입니다.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.