>  기사  >  웹 프론트엔드  >  OC와 JS 간의 상호 작용을 구현하는 방법

OC와 JS 간의 상호 작용을 구현하는 방법

零到壹度
零到壹度원래의
2018-04-13 16:44:341665검색

이 글에서 공유한 내용은 OC와 JS 간의 상호 작용을 구현하는 방법에 대한 특정 참고 가치가 있습니다. 도움이 필요한 친구가 참조할 수 있습니다.

첫 번째: JS는 가치를 전달합니다. JavaScriptCore 프레임워크를 사용하여 OC로 이동합니다.

oc code

#import <JavaScriptCore/JavaScriptCore.h>
- (void) webViewDidFinishLoad:(UIWebView *)webView{
    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    context[@"favQues"] = ^{
        NSArray *a = [JSContext currentArguments];
        for (id obj in a) {
            NSLog(@"obj:%@",obj);
        }
    };
}

여기서 favQues는 JS에서 데이터를 반환하는 함수이고, obj는 JS에서 OC로 전달되는 값입니다.

JS 코드

function QMAction(id, subject, el) {
    favQues(id,subject,el);
}

여기서 QMAction은 HTML의 메소드, id, subject, el은 전달된 매개변수이고 favQues는 데이터를 반환하는 함수입니다. 이는 OC 코드의 데이터와 일치해야 합니다.


두 번째: JS는 사용자 정의 URL 방법을 사용하여 OC에 값을 전달합니다.

OC code

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    NSString *requestUrlStr = [[request.URL absoluteString] stringByRemovingPercentEncoding];
    if ([requestUrlStr hasPrefix:@"objc://"]) {
        NSArray *a = [requestUrlStr componentsSeparatedByString:@"://"];
        NSString *paramStr = a[1];
        NSArray *a1 = [paramStr componentsSeparatedByString:@":/"];
        if (a1.count > 0) {
            NSLog(@"%@-%@",a1[1],a1[2]);
        }else{
            NSLog(@"没有参数");
        }
        return NO;
    }
    return YES;
}

JS code

function QMAction(at, id, subject, el) {
    window.location.href="objc://"+":/"+subject+":/"+id;
}

여기서 objc://는 백엔드와 협상된 사용자 정의 프로토콜 헤더 주제이고 id는 JS가 OC에 전달한 값이며 다음으로 구분됩니다. 열려 있는.

관련 권장 사항:

OC와 JS 간의 상호 작용

OC와 JS 간의 상호 작용

위 내용은 OC와 JS 간의 상호 작용을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.