- GitHub: WebViewJavascriptBridge
- Star: 11000+
說明:雙方交互之前還有一些初始化代碼,此處省略。。。
1. JavaScript 調(diào)用 Objective-C 方法
??
Objective-C 注冊一個方法,JavaScript 調(diào)用該方法。
JS 調(diào)用該方法時可以傳參數(shù)給OC,OC執(zhí)行完之后也可以返回參數(shù)給JS。
Objective-C 端通過如下方法注冊:
[bridge registerHandler:(NSString*)handlerName handler:(WVJBHandler)handler]
示例:
// 1. JS 調(diào)用 OC
// 在 ObjC 中注冊一個名為 testObjcCallback 的處理程序
// JavaScript 端就可以通過 WebViewJavascriptBridge.callHandler("testObjcCallback") 方法來調(diào)用該處理程序了。
// JS 可以給 OC 傳參數(shù),放在 data 中。
// OC 也可以返回參數(shù)給 JS,放在 responseCallback 中。
[_bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponseCallback responseCallback) {
// data 是 JS 傳過來的參數(shù)內(nèi)容
NSLog(@"testObjcCallback called: %@", data);
if (responseCallback) {
// OC 返回給 JS 的內(nèi)容
responseCallback(@"Response from testObjcCallback");
}
}];
JavaScript 端通過如下方法調(diào)用:
bridge.callHandler("handlerName", data)
bridge.callHandler("handlerName", data, function responseCallback(responseData) { ... })
示例:
<!-- 1. JS 調(diào)用 OC -->
bridge.callHandler('testObjcCallback', {'foo': 'bar'}, function(response) {
log('JS got response', response)
})
JS 調(diào)用名為 testObjcCallback 的 Objective-C 方法,同時給 Objective-C 傳遞了參數(shù)'foo': 'bar',JS 還接受并打印了Objective-C 返回的參數(shù)內(nèi)容 response。
2. Objective-C 調(diào)用 JavaScript 方法
??
JavaScript 注冊一個方法,Objective-C 調(diào)用該方法。
OC 調(diào)用 JS 方法時,也可以傳參數(shù)給 JS。
JS 執(zhí)行完該方法之后,也可以返回參數(shù)給 OC。
JavaScript 端通過如下方法注冊:
bridge.registerHandler("handlerName", function(responseData) { ... })
示例:
<!-- 2. OC 調(diào)用 JS 的方法 -->
bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
log('ObjC called testJavascriptHandler with', data)
var responseData = { 'Javascript Says':'Right back atcha!' }
log('JS responding with', responseData)
responseCallback(responseData)
})
Objective-C 端通過如下方法調(diào)用:
[bridge callHandler:(NSString*)handlerName
[bridge callHandler:(NSString*)handlerName data:(id)data]
[bridge callHandler:(NSString*)handlerName data:(id)data responseCallback:(WVJBResponseCallback)callback]
// 2. OC 調(diào)用 JS, 同時傳參數(shù)給 JS。
// 調(diào)用名為 handlerName 的 javascript 處理程序。
// 如果給出了 responseCallback 塊,則 javascript 處理程序可以響應(yīng)。
[_bridge callHandler:@"testJavascriptHandler" data:@{ @"foo":@"before ready" }];