WKWebview 캡 처 AJAX

4483 단어 iOS 개발
프로젝트 에 필요 한 것 은 웹 뷰 의 페이지 에 JS 문 구 를 삽입 해 야 합 니 다. 오늘 BUG 를 얻 었 습 니 다. 웹 뷰 가 url 을 불 러 온 후에 문 구 를 성공 적 으로 실행 하지 못 했 습 니 다. 한 번 의 검 사 를 거 친 후에 웹 뷰 웹 페이지 에 AJAX 기술 이 존재 하 는 것 을 발 견 했 습 니 다. AJAX 는 WKWebview 의 대리 방법 에서 포착 되 지 않 았 습 니 다.
방법
그래서:
일부 자 료 를 찾 아 본 후에 다음 과 같은 결론 을 얻 었 다. 먼저 참고 자 료 를 붙 여 라.
먼저 생각 을 말 하 다.
        js   AJAX  ,
  iOS   webview ,        ,
       webview     ,  js     ,
   JS         ,
  JS OC  ,  iOS 
  • 먼저 웹 뷰 만 들 기
  • WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc]init];
    [self addUserScriptToUserContentController:configuration.userContentController];
    appWebView = [[WKWebView alloc]initWithFrame:self.view.frame configuration:configuration];
    appWebView.UIDelegate = self;
    appWebView.navigationDelegate = self;
    [appWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString: @"http://#############"]]];   
    
  • 대리 따 르 기
  • @interface SQWebViewController ()<WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler>
  • 스 크 립 트 삽입 방법
  • ///    
    - (void) addUserScriptToUserContentController:(WKUserContentController *) userContentController{
        NSString *jsHandler = [NSString stringWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"ajaxHandler" withExtension:@"js"] encoding:NSUTF8StringEncoding error:NULL];
        WKUserScript *ajaxHandler = [[WKUserScript alloc]initWithSource:jsHandler injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:NO];
        [userContentController addScriptMessageHandler:self name:@"callbackHandler"];
        [userContentController addUserScript:ajaxHandler];
    }
  • 스 크 립 트 파일
  • //Every time an Ajax call is being invoked the listener will recognize it and  will call the native app with the request details
    
    $( document ).ajaxSend(function( event, request, settings )  {
        callNativeApp (settings.data);
    });
    
    function callNativeApp (data) {
        try {
            webkit.messageHandlers.callbackHandler.postMessage(data);
        }
        catch(err) {
            console.log('The native context does not exist yet');
        }
    }
  • 리 턴 방법 은 WKScriptMessageHandler 대리 중 한 가지 방법
  • 이 있다.
    /*! @abstract Invoked when a script message is received from a webpage.
     @param userContentController The user content controller invoking the
     delegate method.
     @param message The script message received.
     */
    - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message;
    

    하지만:
    js 층 에서 사용 하 는 AJAX 방법 명 이 일치 하 는 지 확인 하 시 겠 습 니까?
    방법 2:
    우 리 는 또한 제3자 라 이브 러 리 WebView JavascriptBridge 의 구체 적 인 사용 방법 을 사용 할 수 있다. 상세 한 것 은 README 참조.

    좋은 웹페이지 즐겨찾기