参考 [iOS] 使用WebViewJavascriptBridge实现OC与JS交互
详细的就不说了看上面的文章就可以,只是做了简单修改,实现跟上面一样处理。
修改后的地址:demo地址
示例:
JS调用OC
JS代码(这里是找到id为buttons的div 然后创建一个按钮,点击按钮之后调用OC代码 )
var callbackButton = document.getElementById('buttons').appendChild(document.createElement('button'))
callbackButton.innerHTML = '登陆'
callbackButton.onclick = function(e) {
e.preventDefault()
log('点击了JS的按钮')
bridge.callHandler('loginFunc', {'typeId': '100001'}, function(response) {
callbackButton.innerHTML ='登陆成功'
log('JS got response', response)
})
}
OC中实现代码
// 注册个登陆的事件
[_bridge registerHandler:@"loginFunc" handler:^(id data, WVJBResponseCallback responseCallback) {
NSLog(@"js登陆传递过来的数据:%@",data);
// 调用登陆方法
NSString *success= [self logIn:data[@"typeId"]];
/// 登陆成功之后传递给JS的参数
responseCallback(success);
}];
OC调用JS
OC创建一个注册按钮,点击之后调用JS
// OC中一个注册按钮
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(150, 70, 80, 30)];
btn.backgroundColor = [UIColor lightGrayColor];
[btn setTitle:@"注册" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnClickReg:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
// 点击注册按钮
-(void)btnClickReg:(UIButton *)sender
{
// registerFunc 跟JS协商的名字 data传递给JS的参数 responseCallback JS收到之后回调返回的数据
[_bridge callHandler:@"registerFunc" data:@{ @"mobile":@"10086"} responseCallback:^(id responseData) {
NSLog(@"%@",responseData[@"success"]);
}];
JS中的逻辑
bridge.registerHandler('registerFunc', function(data, responseCallback) {
log('注册收到OC的数据:', data)
var responseData = { 'success':'你已经注册成了' }
log('JS打印数据', responseData)
responseCallback(responseData)
})
好了,至此结束,不懂的看上面的demo就可以了。