html 页面
//1 申请交互
function setupWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
window.WVJBCallbacks = [callback];
var WVJBIframe = document.createElement('iframe');
WVJBIframe.style.display = 'none';
WVJBIframe.src = 'https://__bridge_loaded__';
document.documentElement.appendChild(WVJBIframe);
setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
}
//注册 回调
setupWebViewJavascriptBridge(function(bridge) {
<!--oc -> js -->
bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
alert("收到Native的通知")
var responseData = { 'Javascript Says':'Right back atcha!----' }
responseCallback(responseData)
})
<!--js -> oc -->
var callbackButton = document.getElementById('btn')
callbackButton.onclick = function(e) {
bridge.callHandler('jsToOc2', {'foo': 'bar'}, function(response) {
//执行js操作
})
}
native 代码
//1,js -> oc
_bridge = [WebViewJavascriptBridge bridgeForWebView:webView];
[_bridge registerHandler:@"jsToOc" handler:^(id data, WVJBResponseCallback responseCallback) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"通知" message:@"js 调用 oc 方法" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
responseCallback(@"Response from testObjcCallback");
}];
//2,oc -> js
[callbackButton addTarget:self action:@selector(callHandler:) forControlEvents:UIControlEventTouchUpInside];
btn.bk_whenTap({^(UIButton *btn)
id data = @{ @"greetingFromObjC": @"这是Native" };
[_bridge callHandler:@"testJavascriptHandler" data:data responseCallback:^(id response) {
NSLog(@"testJavascriptHandler responded: %@", response);
}];
}
网友评论