WebViewJavascriptBridge使用说明(IOS)

来源:互联网 发布:淘宝童装模特丫丫 编辑:程序博客网 时间:2024/06/10 23:38

原文: http://dxldy.iteye.com/blog/2078350

因为最近项目需要跨平台,在网上找到这个demo拿来用。
首先简单说一下跨平台。
由于现在很多产品都是有安卓版跟ios版,就意味着同一样东西要出两套,由两组人去完成,不仅增加了开发成本,也大大加剧了维护成本。聪明的coder想出了跨平台的思路,用html写页面,分别用webview(ios),(安卓)来加载,对某些html无法调用的硬件,通过双方的交互来实现方法的互调和传值。这个过程就是跨平台,这个涉及两方面的知识,第一是ios本身的叫做native,第二是web前端的叫做web。
一,下面来说一下WebViewJavascriptBridge在ios端怎么样使用。
1,下载WebViewJavascriptBridge.h 和 WebViewJavascriptBridge.m文件到自己的项目中,并添加到项目。下载地址

2.初始化一个webview(viewdidload), Oc代码

UIWebView* webView = [[UIWebView alloc] initWithFrame:self.view.bounds];  [self.view addSubview:webView]; 

3.将此webview与WebViewJavascriptBridge关联(viewdidload)

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

ps:此时你的webview就与js搭上桥了。下面就是方法的互调和参数的互传。
(1) js调oc方法(可以通过data给oc方法传值,使用responseCallback将值再返回给js)

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

这里注意testObjcCallback这个方法的标示。html那边的命名要跟ios这边相同,才能调到这个方法。当然这个名字可以两边商量着自定义。简单明确即可。
(2)oc调js方法(通过data可以传值,通过response可以接受js那边的返回值)
注意这里的testJavascriptHandler也是个方法标示。
(3)oc给js传值(通过response接受返回值)

[_bridge send:@"A string sent from ObjC to JS" responseCallback:^(id response) {      NSLog(@"sendMessage got response: %@", response);  }]; 

(4)oc给js传值(无返回值)

[_bridge send:@"A string sent from ObjC after Webview has loaded."]; 

二,再说一下web的问题,首先要有一个html文件然后引入WebViewJavascriptBridge.js这个文件下载地址
web端的使用方式:

$(document).ready(function(){    function connectWebViewJavascriptBridge(callback) {        if (window.WebViewJavascriptBridge) {            callback(WebViewJavascriptBridge)        } else {            document.addEventListener('WebViewJavascriptBridgeReady', function() {                callback(WebViewJavascriptBridge)            }, false)        }    }    connectWebViewJavascriptBridge(function(bridge) {        bridge.init(function(message, responseCallback) {            alert(JSON.stringify(message));            var data = { 'Javascript Responds':'Wee!' };            responseCallback(data);        })        bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {            alert(JSON.stringify(data));            var responseData = { 'Javascript Says':'Right back atcha!' }            responseCallback(responseData)        })        $("#btn1").on("click",function(e){            e.preventDefault()            var data = 'Hello from JS button'            bridge.send(data, function(responseData){                alert(JSON.stringify(responseData))            })        });        $("#btn2").on("click",function(e){            e.preventDefault()            bridge.callHandler('testObjcCallback', {'foo': 'bar'}, function(response) {                alert(JSON.stringify(response));            })        });    })});

demo在这

0 0
原创粉丝点击