DirTy™의 하루일과/DirTy™의 가당찮은iOS

[IOS] javascript에서 ios 로 호출하기.

DirTy™ 2015. 12. 9. 14:36

하이브리드 앱을 하게되면 100% 쓸일이 있는 구문이다.

보통 웹에서 네이티브로 무언가를 통지하고 싶을때 사용된다.


javascript에서는 아래와 같이 한다.

window.location = "jscall://callObjectiveCFromJavascript"


위의 javascript가 호출이 되면

ios에서는 webView의 delegate메소드 webview:souldStartLoadWithRequest:naviationType 메소드를 호출된다.

이때 특정 메소드가 실행되게 구현하면 된다. 테스트용이라 간단히 log출력만 하도록 해보자.


- (void) callObjectiveCFromJavascript {

    NSLog(@"callobjective-c from javascript");

}


- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request

                                        navigationType:(UIWebViewNavigationType)navigationType

{

    if ([[[request URL] absoluteString] hasPrefix:@"jscall:"]) {


        NSString *requestString = [[request URL] absoluteString];

        NSArray *components = [requestString componentsSeparatedByString:@"://"];

        NSString *functionName = [components objectAtIndex:1];


        [self performSelector:NSSelectorFromString(functionName)];


        return NO;

    }


    return YES;

}


하이브리드 앱을 만들때는 유용하게 쓰이니 꼭 알아두도록 하자.