dsbridge在github上给出的文档已经很详细了但是就是有些地方没有解释明白,我这里对ios部分的方法做下解释
1.先pod进去dsBridge
pod "dsBridge"
2.然后官网给我解析就是开始创建一个JsApiTest类,但是没有说明这个类是干什么的,其实这个类中的方法都是js调用oc的方法。
#import "JsApiTest.h"
#import "dsbridge.h"
@implementation JsApiTest
- (NSString *)testSyn: (NSString *) msg
{
return [msg stringByAppendingString:@"[ syn call]"];
}
- (void)testAsyn:(NSString *) msg :(JSCallback) completionHandler
{
completionHandler([msg stringByAppendingString:@" [ asyn call]"],YES);
}
@end
3.然后开始在项目中创建wkwebview
DWKWebView * dwebview=[[DWKWebView alloc] initWithFrame:CGRectMake(0, 0, kScreenW, kScreenH-kIPHONEXNAVHEIGHT)];
NSString *urlStr = @“”;
NSMutableURLRequest *dealRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]
cachePolicy:NSURLRequestReloadIgnoringCacheData
timeoutInterval:15.0];
[dwebview loadRequest:dealRequest];
// [dwebview addJavascriptObject:[[JsApiTest alloc] init] namespace:nil];
[dwebview addJavascriptObject:self namespace:nil];
[self.view addSubview:dwebview];
[dwebview setDebugMode:true];
这里要说明的的如果你使用[dwebview addJavascriptObject:[[JsApiTest alloc] init] namespace:nil]这句来初始化DWKWebView的话,js调用你原生的方法都要写到你自己定义JsApiTest类中。如果你使用[dwebview addJavascriptObject:self namespace:nil];来初始化,那么你就不必要在创建JsApiTest类了,js调用你原生的回调方法直接在你的项目中当成直接的方法使用就行。
js调用原生方法以及注释
//testSyn是js调用原生的方法名称,msg是js给你传递的参数需要注意的是msg的类型不仅是NSString类型的,你可以改成自己需要的任何类型,msg参数你也可以自己定义成任何名字 同步异步方法都是这样
- (NSString *)testSyn: (NSString *) msg;
原生调用js方法
[dwebview callHandler:@"addValue" arguments:@[@"12",@"3"] completionHandler:^(NSNumber* value){
DLog(@"oc调用js回调%@",value);
}];
这个方法没什么好说的,但是貌似只能给js端传递数组这种类型,不知道能不能传递其他类型的参数,比如我们这边要传递给后台的就是字典类型的参数,我们把字典转成字符串然后放到数组里面来实现了,不知道能不能直接传递,没做研究
DSBridge-IOS github:https://github.com/wendux/DSBridge-IOS