UIWebView---WebViewJavascriptBridge

参考https://github.com/marcuswestin/WebViewJavascriptBridge/blob/master/README.md

http://blog.csdn.net/yanghua_kobe/article/details/8209751

WebViewJavascriptBridge使用


js端和ios端的联系                                                                                 

bridge.init(function(message, responseCallback)                                                   (ios端调用send的时候 js端的这个函数会响应)

bridge.registerHandler('testJavascriptHandler',function(data, responseCallback) (ios端调用call handler的时候 js端的这个函数会响应)

bridge.send(data, function(responseData)                                                              (js端调用该函数时ios端的 bridgeForWebView。。。。会响应)

bridge.callHandler('testObjcCallback', {'foo':'bar'}, function(response)                   (js端调用该函数时ios端的 registerHandler。。。。会响应)


JS端怎么写

<!DOCTYPE html>
<html>
    <body>
        <h1 id="id1">I'm Html </h1>
        <button type="button" id = "button1"> send directly</button>
        <button type="button" id = "button2"> call handler </button>
        <script>
            // 这2句是必须写的
            function connectWebViewJavascriptBridge(callback) {
                if (window.WebViewJavascriptBridge) {
                    callback(WebViewJavascriptBridge)
                } else {
                    document.addEventListener('WebViewJavascriptBridgeReady', function() {
                                              callback(WebViewJavascriptBridge)
                                              }, false)
                }
            }
        // 这2句是必须写的
        connectWebViewJavascriptBridge(function(bridge) {
                                       
                                       /* Init your app here */
                                       // 从OC  bridge.send 方法过来的 就会调用到这个方法
                                       bridge.init(function(message, responseCallback) {
                                                   alert('Received message: ' + message)
                                                   if (responseCallback) {
                                                   responseCallback("send Right back atcha")
                                                   }
                                                   })
                                       // 从oc通过Handler发送过来的就会调用这个函数
                                       bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
                                                              var responseData = { 'Javascript Says':'Right back atcha!' }
                                                              alert('Received message: ' + data)
                                                              if (responseCallback) {
                                                              responseCallback(responseData)
                                                              }
                                                              })
                                       
                                       // TODO: 想做点什么在这边(connectWebViewJavascriptBridge函数里面)
                                       //send
                                       var button1 = document.getElementById('button1')
                                       button1.onclick = function() {
                                       var data = 'Hello from JS button'
                                       bridge.send(data, function(responseData) {
                                                   
                                                   })
                                       }
                                       // call handler
                                       var button2 = document.getElementById('button2')
                                       button2.onclick = function() {
                                       // 注意标示要一致
                                       bridge.callHandler('testObjcCallback', {'foo': 'bar'}, function(response) {
                                                        
                                                          })
                                       }
                                       })
        
        </script>
    </body>
</html>

注意:1.函数要写在//todo那边
           2. connectWebViewJavascriptBridge(callback)/ connectWebViewJavascriptBridge(function(bridge)别忘了

ios端

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    NSURL* url = [NSURL fileURLWithPath:path];
    NSURLRequest* request = [NSURLRequest requestWithURL:url] ;
    [self.webView loadRequest:request];
    // 在这边会收到js端send过来的数据
    _bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) {
        NSLog(@"ObjC received message from JS: %@", data);
        responseCallback(@"Response for message from ObjC");
    }];
    // 在这边会收到 js端 callHandler传过来的数据
    [_bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponseCallback responseCallback) {
        NSLog(@"testObjcCallback called: %@", data);
        responseCallback(@"Response from testObjcCallback");
    }];

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

}

- (IBAction)sendMessage:(id)sender {
    // 直接send  js端的 bridge.init(function(message, responseCallback)会收到信息
    [_bridge send:@"A string sent from ObjC to JS" responseCallback:^(id response) {
        NSLog(@"sendMessage got response: %@", response);
    }];
}

- (IBAction)callHandler:(id)sender {
     // 用handler的js端的   bridge.registerHandler('testJavascriptHandler', function(data, responseCallback)会收到
    id data = @{ @"greetingFromObjC": @"Hi there, JS!" };
    // 标示是testJavascriptHandler js端要保持一致
    [_bridge callHandler:@"testJavascriptHandler" data:data responseCallback:^(id response) {
        NSLog(@"testJavascriptHandler responded: %@", response);
    }];
注意用handler的时候标记要一样

局限性

据说这么写会影响Android的交互 所以改天看看要javascriptcore怎么用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值