iOS开发进阶之旅-WebViewJavascriptBridge的使用
2016-03-13 20:11
519 查看
由于公司是一个电商平台,一些活动页面、商城首页对于灵活性要求比较高,对于这些灵活的页面,利用h5来开发是再合适不过的了。由于需求的驱动,在git上找到了WebViewJavascriptBridge,来实现h5与native的进行一些数据上的交互。经过一段时间的使用,对其有了一定的理解在此总结一下。
乍一看到WebViewJavascriptBridge的sample时,被里面的各种回调搞的有点难受,不过如果跳出来,从比较高的层次来看这个三方库的使用,暂时不去理会一些细枝末节思路会清晰很多。
WebViewJavascriptBridge实现交互的原理其实就是注册和调用的关系。
webView向OC传递数据:
OC注册handler,webView调用通过参数将数据传递进去,OC通过回调处理数据。
OC向webView传递数据也是一样的:
webView注册handler,OC通过参数将数据传递进去,webView通过回调处理数据。
对于WebViewJavascriptBridge的具体使用(OC端)
一个webView,一个bridge
javaScriptBridge是webView和native之间传递数据的桥梁,他的存在是依赖于一个webView的实例对象的,一般来说一个webView对应一个javaScriptBridge
@property
WebViewJavascriptBridge* bridge;
@property
UIWebView * webView;
bridge的初始化
[WebViewJavascriptBridge
enableLogging];
_bridge = [WebViewJavascriptBridge
bridgeForWebView:_webView
webViewDelegate:self
handler:^(id data,
WVJBResponseCallback responseCallback) {
}];
注册handler
[_bridge
registerHandler:@"testObjcCallback"
handler:^(id data,
WVJBResponseCallback responseCallback) {
NSLog(@"testObjcCallback called: %@", data);
responseCallback(@"Response from testObjcCallback");
}];
调用webView注册的handler
[_bridge
callHandler:@"testJavascriptHandler"
data:@{
@"foo":@"before ready"
}];
关于handler的调用
我们看到在WebViewJavascriptBridge中有两种类型的handler,这两种类型的handler的调用时机略有不同。
WebViewJavascriptBridge的调用时基于send和callhandler方法的。而这两种方法分别对应于以上两种handler。
js端调用bridge.send()对应于OC中初始化中的handler
js端调用bridge.callhandler对应于OC中注册的handler
关于handler中的参数
data:js传递给OC的数据,responseCallback,OC端拿到数据后并处理成功后针对js端的回调。
js端的使用
由于自己对于js是半瓶水的水平,就不在这里晃荡了,以下的这些为固定写法,js文件中必须包含这些代码
同理
oc中[_bridge send];对应于js中的bridge.init();
oc中的[_bridge callHandler:]方法,对应于js中的bridge.registerHandler();
乍一看到WebViewJavascriptBridge的sample时,被里面的各种回调搞的有点难受,不过如果跳出来,从比较高的层次来看这个三方库的使用,暂时不去理会一些细枝末节思路会清晰很多。
WebViewJavascriptBridge实现交互的原理其实就是注册和调用的关系。
webView向OC传递数据:
OC注册handler,webView调用通过参数将数据传递进去,OC通过回调处理数据。
OC向webView传递数据也是一样的:
webView注册handler,OC通过参数将数据传递进去,webView通过回调处理数据。
对于WebViewJavascriptBridge的具体使用(OC端)
一个webView,一个bridge
javaScriptBridge是webView和native之间传递数据的桥梁,他的存在是依赖于一个webView的实例对象的,一般来说一个webView对应一个javaScriptBridge
@property
WebViewJavascriptBridge* bridge;
@property
UIWebView * webView;
bridge的初始化
[WebViewJavascriptBridge
enableLogging];
_bridge = [WebViewJavascriptBridge
bridgeForWebView:_webView
webViewDelegate:self
handler:^(id data,
WVJBResponseCallback responseCallback) {
}];
注册handler
[_bridge
registerHandler:@"testObjcCallback"
handler:^(id data,
WVJBResponseCallback responseCallback) {
NSLog(@"testObjcCallback called: %@", data);
responseCallback(@"Response from testObjcCallback");
}];
调用webView注册的handler
[_bridge
callHandler:@"testJavascriptHandler"
data:@{
@"foo":@"before ready"
}];
关于handler的调用
我们看到在WebViewJavascriptBridge中有两种类型的handler,这两种类型的handler的调用时机略有不同。
WebViewJavascriptBridge的调用时基于send和callhandler方法的。而这两种方法分别对应于以上两种handler。
js端调用bridge.send()对应于OC中初始化中的handler
js端调用bridge.callhandler对应于OC中注册的handler
关于handler中的参数
data:js传递给OC的数据,responseCallback,OC端拿到数据后并处理成功后针对js端的回调。
js端的使用
由于自己对于js是半瓶水的水平,就不在这里晃荡了,以下的这些为固定写法,js文件中必须包含这些代码
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) }) }
同理
oc中[_bridge send];对应于js中的bridge.init();
oc中的[_bridge callHandler:]方法,对应于js中的bridge.registerHandler();
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- js判断客户端是iOS还是Android等移动终端的方法
- iOS应用中UISearchDisplayController搜索效果的用法
- IOS开发环境windows化攻略
- iOS应用中UITableView左滑自定义选项及批量删除的实现
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码