본문 바로가기
프로그래밍/iOS

UIWebView 내의 컨텐츠 이벤트 가로채기

by 백룡화검 2011. 10. 27.
UIWebView 클래스를 이용하다보면,
가끔 로딩한 웹뷰 컨텐츠 내에서 어떤 이벤트가 일어나는지 가로채고 싶을 때가 있습니다.
예 를 들면, Resource 폴더 내에 내가 원하는 .html 파일을 넣고, 그 폴더에서 Get 방식으로 파라미터를 특정 서버에 전달하는 경우에 정작 사용자가 만든 프로그램 내에서는 이 이벤트가 어떻게 서버로 흘러 들어가는지를 포착하기가 어려운 것이 현실입니다. UIWebView는 로딩만 할뿐, 안에 로딩된 컨텐츠가 어떻게 전달되는지는 미궁이겟죠..
그러나 역시나 이러한 이벤트에 대한 사용 가능한 함수가 있었네요.

이용법은 다음과 같습니다.

<PRE>@interface WebBrowserTutorialAppDelegate : NSObject <UIWebViewDelegate> {

일단 델리게이트 부분에 웹뷰 델리게이트를 추가해주시고요...

webView.delegate = self;

웹뷰 변수 엔트리 부분에 델리게이트를 원하는 부분에 추가를 합니다.

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = request.URL;
NSString *urlString = url.absoluteString;
NSLog(urlString);
return YES;
}
그리고 위에서 처럼,
shouldStartLoadWithRequest 함수를 포함해서 이용하시면 되는데요.
먼저, request라는 변수는 웹뷰에 로드된 컨텐츠에서 어떤 리퀘스트가 있을때 들어오는 변수인데,
다음과 같은 것으로 구성이 되어 있습니다.

* absoluteString – An absolute string for the URL. Creating by resolving the receiver’s string against its base.
* absoluteURL – An absolute URL that refers to the same resource as the receiver.
If the receiver is already absolute, returns self.
* baseURL – The base URL of the receiver. If the receiver is an absolute URL, returns nil.
* host – The host of the URL.
* parameterString – The parameter string of the URL.
* password – The password of the URL (i.e. http://user:pass@www.test.com would return pass)
* path – Returns the path of a URL.
* port – The port number of the URL.
* query – The query string of the URL.
* relativePath – The relative path of the URL without resolving against the base URL.
 If the receiver is an absolute URL, this method returns the same value as path.
* relativeString – string representation of the relative portion of the URL.
 If the receiver is an absolute URL this method returns the same value as absoluteString.
* scheme – The resource specifier of the URL (i.e. http, https, file, ftp, etc).
* user – The user portion of the URL.

많은 것을 알수가 있죠?
</PRE>