随笔:OC和JS交互

1.JS 代码需要进行如下处理并告知给原生端

//  h5->app (有参数) 调用原生方法
    function h5ToNative(){
        app.onOCFunc('ocFunc'); //调用OC方法
        onOCFuncParameter("11","222"); //传递参数给OC
        
    }
 // app->h5 (带参数) 返回原生处理结果
    function ocFuncBack(parameter1,parameter2){
        alert("回调结果:" + parameter1 + " " + parameter2 )
    }

关键字如下:调用OC方法app.onOCFunc,传递参数给OC onOCFuncParameter,原生返回结果给JSocFuncBack

2.原生断需要捕获JS上下文,并注入到JS中,监听JS回调函数

设置JS导出代理


#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>

@protocol AppJSObjectDelegate <JSExport>

// 方法名和JS代码必须一一对应
- (void)onOCFunc:(NSString *)message;


@end

@interface AppJSObject : NSObject<AppJSObjectDelegate>

@property(nonatomic,weak) id<AppJSObjectDelegate> delegate;

@end
#import "AppJSObject.h"

@implementation AppJSObject

- (void)onOCFunc:(NSString *)message{
    [self.delegate onOCFunc:message];
}

@end

捕获JS上下文进行处理

#import "AppJSObject.h"

@interface ViewController ()<UIWebViewDelegate,AppJSObjectDelegate>
@property(nonatomic ,strong) UIWebView *webView;
@end

-(void)webViewDidFinishLoad:(UIWebView *)webView{
    
    JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    AppJSObject *jsObject = [AppJSObject new];
    jsObject.delegate = self;
    context[@"app"] = jsObject; // 这里的app和JS里面的app对应
    context[@"onOCFuncParameter"] = ^(NSString* p1, NSString* p2){
        NSLog(@"这里相应JS传递的参数,参数1:%@, 参数2:%@", p1, p2);
    };
}

//JS-OC
- (void)onOCFunc:(NSString *)message{
    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    NSString* alertJS = [NSString stringWithFormat:@"ocFuncBack('%@','%@')",@"回调参数1",@"回调参数2"];
    [context evaluateScript:alertJS];
}

个人梳理的示例图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值