2012-10-21 6 views
1

내 프로젝트 내의 JavaScript 함수에서 UIViewController를 호출하려고합니다. 나는 새로운 UIViewController를 호출 할 필요가있는이 응용 프로그램을 약간 변경하라는 요청을 받았습니다. JavaScript 함수를 호출 할 수있는 곳을 찾았지만 다른 방법으로 이동하여 일부 텍스트가있는 UIViewController를 열어야합니다. 누구든지 Xcode 프로젝트 코드로이 작업을 수행하는 방법에 대한 샘플을 가지고 있습니까?JavaScript 함수에서 UIViewController 호출

감사합니다.

답변

0

간단한 호출의 경우 JSBridge을 사용합니다. JSBridge.js 헤더 파일 하나를 추가하여 자바 스크립트 측을 수정해야합니다. 나는 그것을 테스트하고 작동합니다.

일반적인 생각은 javascript가 실제로 탐색중인 주소를 리디렉션 할 수 있다는 것입니다. 이 경우 고유 한 명령 포함 URL로 기본 콜백 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType이 호출됩니다. 이 URL은 자바 스크립트에서 전달 된 다음 콜백에서이 URL을 구문 분석하고 적절한 작업을 호출 할 수 있습니다.

은 일반적으로 자신의 JSBridge 기능을 할 수 말하기, 그것은 다음과 같이 작동합니다 :

  1. 를 자바 스크립트에서 어떤 명령을 수행 할 때, 호출 :

    window.location.href = "command : // goToHomeViewController"

  2. 이 javaScript로 페이지를로드 한 webView 대리자에서 사용자 명령에 대한 후크를 만듭니다. 당신의 ViewController.m

    (BOOL)webView:(UIWebView *)p_WebView shouldStartLoadWithRequest:(NSURLRequest *)request   navigationType:(UIWebViewNavigationType)navigationType 
    { 
    
        BOOL result = YES; 
        NSString *urlString = [[request URL] absoluteURL]; 
        if ([urlString compare:@"command://goToHomeViewController"] == NSOrderedSame) 
        { 
         result = NO; 
         [self goToHomeViewController]; 
        } 
    
        return result;  
    } 
    

    당신이 당신의 shouldStartLoadWithRequest에 차단 명령을 가지고 이런 식으로

는, 당신은 당신의 ViewController 네이티브 코드에 명령을 수행하고 웹보기로드 페이지를 취소 NO를 반환합니다.

+0

감사합니다. 그러나 이것이 내가 찾고있는 것이 맞는지 확신 할 수 없습니다. 또한 JSBridge 예제를 다운로드하여 실행하려고 시도했으며 JSON Framework가 필요하다고 말하면서 JSON Framework가 포함되어 있다고 말합니다.하지만 그렇지 않습니다. 설치할 프레임 워크를 찾을 수 없습니다. UIWebView로 다시 돌아가고 싶지 않습니다. Javascript에서 표준 UIViewController로 돌아갈 필요가 있습니다. 이것이 가능한지 아십니까? 다시 한번 감사드립니다. – Jon

+0

들어오는 URL을 가로 채어 위와 같이 명령으로 변환해야합니다. –

+0

나는 올바른 길을 가고 있다고 생각하며 도와 주셔서 감사합니다. 유일한 생각은 위 코드를 어디에 두어야하는지 코드에서 추적하는 것입니다. MainViewController에서 shouldStartLoadWithRequest가 주석 처리됩니다. 앱이 Cordova (일명 PhoneGap)를 사용하고 있으며 ChildBrowser 및 ASIHTTPRequest가 있습니다. 나는 새로운 UIViewController에 점프를 추가하도록 임무를 부여 받았다. 다른 아이디어가 있다면 크게 환영 할 것입니다. 다시 한번 감사드립니다! – Jon

관련 문제