UIWebView에서 특정 링크에대해 개별적인 처리를 하려고했다.
그 특정링크는 targer:'_blank' 속성을 가진 녀석을 safari로 링크를 돌리려고했다.
하지만 앱상에서 해당 웹뷰의 웹페이지 속성을 불러올수 있는 방법을 못찾다가 다음과 같은 방법으로 해결했다.
해당 웹페이지의 javaScript 속성을 변경하는것.
- (void)webViewDidFinishLoad:(UIWebView *)webView { NSString *js = @"\ var d = document.getElementsByTagName('a');\ for (var i = 0; i < d.length; i++) {\ if (d[i].getAttribute('target') == '_blank') {\ d[i].removeAttribute('target');\ d[i].setAttribute('href', d[i].getAttribute('href') + '&+?open_safari=1');\ }\ }\ "; [webView stringByEvaluatingJavaScriptFromString:js]; }소스의 내용은 다음과 같다.
NSString에 javascript코드를 넣는데 tagname a를 가진 모든 도큐먼트를 가져와서 하나하나 씩 target:'_blank'속성이 있는지는 찾는다.
찾게 되면 해당 도큐먼트에 'href'속성에 임의로 open_safari=1라는 주소를 추가한다.
그리고 해당 web뷰에 넣으면 끝
이제 테스트를 해보자 UIWebViewDelegate속성중
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 인스턴스메서드를 이용하면 되겠다.
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if (navigationType == UIWebViewNavigationTypeLinkClicked) { NSURL *url = [request URL]; NSString *stringurl = [url absoluteString]; NSArray *arrItem = [stringurl componentsSeparatedByString:@"&+?"]; if ([arrItem count] >= 2) { NSString *urlstring = [arrItem objectAtIndex:0]; NSURL *url = [[NSURL alloc]initWithString: [urlstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [[UIApplication sharedApplication] openURL:url]; return false; } return true; } return true; }
약간의꼼수를 이용한 방법이다.
'IT > iOS' 카테고리의 다른 글
UIWebView 웹페이지의 넓이제한주기 (0) | 2014.04.18 |
---|---|
UIWebView에 Header정보 넣기 (2) | 2014.04.18 |
UIWebView bounce 비활성화 하기 (0) | 2014.04.18 |
custom TableView Cell Button selector (0) | 2014.04.18 |
Core Data Attributes수정 및 추가 할때 순서 (0) | 2014.04.18 |