WebViewJavascriptBridge使用

WebViewJavascriptBridge使用

WebViewJavascriptBridge是一個Objective-C與JavaScript進行消息互通的三方庫。這裏簡單總結一下其使用

Objective-C初始化

_bridge = [WebViewJavascriptBridge bridgeForWebView:webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) {
NSLog(@"ObjC received message from JS: %@", data);
responseCallback(@"Response for message from ObjC");
}];

這是使用類方法創建一個WebViewJavascriptBridge對象。其中有一個block類型的handle。這個handle主要是用來接收JavaScript裏面通過send方法傳過來的消息的,這裏的handle裏面的參數與JavaScript中send方法裏面的參數對應。

JavaScript 初始化

function connectWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) {
callback(WebViewJavascriptBridge);
} else {
document.addEventListener('WebViewJavascriptBridgeReady', function() {callback(WebViewJavascriptBridge);}, false);
}
}
connectWebViewJavascriptBridge(function(bridge) {
bridge.init(function(message, responseCallback) {
log('JS got a message', message)
var data = { 'Javascript Responds':'Wee!' }
log('JS responding with', data)
responseCallback(data)
})
});

這裏初始化先是創建了一個connectWebViewJavascriptBridge方法,該方法註冊了一個WebViewJavascriptBridgeReady事件,同時聲明瞭一個全局的WebViewJavascriptBridge變量。我們可以在外部通過WebViewJavascriptBridge調用相關方法。

在init裏面同樣有一個function,這個function同樣是用來接收Objective-C裏面通過send方法發送的消息的,參數與OC裏的send方法參數對應

Objective-C調用JavaScript

首先要在JavaScript裏面註冊一個方法:

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)
})

OC調用這個方法

[_bridge callHandler:@"testJavascriptHandler" data:data responseCallback:^(id response) {
NSLog(@"testJavascriptHandler responded: %@", response);
}];

JavaScript調用Objective-C

OC註冊一個方法:

[_bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponseCallback responseCallback) {
NSLog(@"testObjcCallback called: %@", data);
responseCallback(@"Response from testObjcCallback");
}];

JavaScript調用方法

bridge.callHandler('testObjcCallback', {'foo': 'bar'}, function(response) {
log('JS got response', response)
});

JavaScript向OC中發送消息

bridge.send(data, function(responseData) {
log('JS got response', responseData)
});

這種方式發送消息實際上是調用了OC初始化時的handle

OC向JavaScript發送消息

[_bridge send:@"A string sent from ObjC before Webview has loaded." responseCallback:^(id responseData) {
NSLog(@"objc got response! %@", responseData);
}];

這個send方法,實際上是調用了JavaScript初始化init裏面的function

參考&總結

以上方法大部分都包含沒有callback的方法。可以再頭文件中找到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章