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];
}
个人梳理的示例图