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.