WebViewJavascriptBridge——實現(xiàn)OC與JS的相互調(diào)用

說明:雙方交互之前還有一些初始化代碼,此處省略。。。

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" }];

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容