美文网首页
WebViewJavascriptBridge实现JS和OC的相

WebViewJavascriptBridge实现JS和OC的相

作者: 北极星的笔记 | 来源:发表于2016-04-30 07:32 被阅读455次

目前很多APP都是 原生+H5开发的,这种混合开发模式经常需要进行一些JS和OC的相互调用,而WebViewJavascriptBridge就是用来解决这个问题的。它的使用也是非常简单的,下面分两种情况展示一下我是如何使用的。

准备工作
  • 在JS文件或者HTML文件的script 标签中添加下面的代码片段,用来设置JS和OC相互调用的上下文环境 ,这里是在HTML的script标签中添加的。
    <script>
    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 = 'wvjbscheme://__BRIDGE_LOADED__'; document.documentElement.appendChild(WVJBIframe); setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0) }
    </script>
  • 在controller的.m中导入头文件 WebViewJavascriptBridge.h,添加一个UIWebView属性和一个WebViewJavascriptBridge的成员变量_bridge
    { WebViewJavascriptBridge *_bridge; } @property(nonatomic, strong)UIWebView *webView;
    初始化WebViewJavascriptBridge代码如下
    [WebViewJavascriptBridge enableLogging];//打印日志 _bridge = [WebViewJavascriptBridge bridgeForWebView:self.webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) { }];
    至此,JS与OC相互调用的环境就配置好了,接下来实现如何调用。
JS调用OC
  • 首先在viewDidLoad方法中注册需要在JS代码中调用的函数,代码如下
    [_bridge registerHandler:@"backAction" handler:^(id data, WVJBResponseCallback responseCallback) { //ToDo }
    在html中有个按钮的id 是backicon,点击按钮的时候这样来调用OC的代码
    $('#backicon').click(function() { setupWebViewJavascriptBridge(function(bridge) {
    bridge.callHandler('backAction', function responseCallback(responseData) {
    });
    });
    });
    $符号表示jQuery,这里是一种简写的形式。
OC调用JS
  • 首先在JS文件或者HTML文件中注册需要在OC中调用的函数
    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)
    })这里注册了一个名为 testJavascriptHandler 的JS函数,下面在OC中调用该函数[_bridge callHandler:@"testJavascriptHandler" data:@{ @"foo":@"before ready" }];`

为了方便查看输出日志,上面用到了log方法,该方法是这样定义的
var uniqueId = 1 function log(message, data) { var log = document.getElementById('log') var el = document.createElement('div') el.className = 'logLine' el.innerHTML = uniqueId++ + '. ' + message + ':<br/>' + JSON.stringify(data) if (log.children.length) { log.insertBefore(el, log.children[0]) } else { log.appendChild(el) } }

希望了解更多关于WebViewJavascriptBridge的朋友可以点击下面的连接到github上详细了解WebViewJavascriptBridge

相关文章

网友评论

      本文标题:WebViewJavascriptBridge实现JS和OC的相

      本文链接:https://www.haomeiwen.com/subject/hbvfrttx.html