原文链接:http://www.jianshu.com/p/ca496cb680fe
前言

当下,很多APP里面都会有HTML5网页,我们除了简单的用WebView加载显示外,很多情况下,我们还需要和WebView进行交互,比如点击WebView上面的按钮调用OC端的函数实现具体操作。

因此今天为大家介绍一个优秀的开源小项目,就是我们今天的主角--WebViewJavascriptBridge。它主要帮助我们优雅的实现OC与JS的交互,非常方便简洁。

当然,有很多优秀的开发者写过WebViewJavascriptBridge的使用包括实现原理,首先表示感激和敬意。但是作为一个初学者或者一个急于实现功能的人来说,大部分时候我们更希望一个直奔主题的文章。所以,本文的核心就是WebViewJavascriptBridge在实际开发中的使用。

使用步骤

  • Github上下载WebJavaScriptBridge
  • 解压缩包,将WebViewJavascriptBridge文件夹拖到你的工程中

1.png
  • 在需要使用WebViewJavascriptBridge的类文件中引入头文件WebViewJavascriptBridge.h
  • 加载UIWebView,遵守<UIWebViewDelegate>协议

具体使用

  • 创建并初始化WebJavaScriptBridge实例

       #import "ExampleUIWebViewController.h"
    #import "WebViewJavascriptBridge.h" @interface ExampleUIWebViewController ()
    //声明`WebViewJavascriptBridge`对象为属性
    @property WebViewJavascriptBridge* bridge; @end - (void)viewWillAppear:(BOOL)animated { //用UIWebView加载web
    UIWebView* webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; //设置能够进行桥接
    [WebViewJavascriptBridge enableLogging];
    // 初始化*WebViewJavascriptBridge*实例,设置代理,进行桥接
    _bridge = [WebViewJavascriptBridge bridgeForWebView:webView webViewDelegate:self handler:^(id data, WVJBResponseCallback responseCallback) {
    NSLog(@"ObjC received message from JS: %@", data);
    responseCallback(@"Response for message from ObjC");
    }]; }
  • JS调用OC

    • 什么是JS调用OC?

      举个例子来说就是在网页中有一个登录按钮,点击登录按钮后,具体的登录功能是由OC端实现的,即登录功能实现需要我们在工程里有一个类似loginMethod的函数去具体操作。

    • 工作流程

      站在实际开发的角度来解释,就是假如现在有一个网页,在网页中有个登录按钮需要通过JS调OC的方式实现。那么我们首先需要跟负责网页编码的人员(一般是后台)商定出一个方法名称,也就是给这个登录按钮点击事件取个名字,例如叫loginCallBack。然后我们需要在代码里注册这个事件并负责它的具体实现。当用户点击这个登录按钮的时候,后台就会通知给这个事件的注册者去执行,有点像block的执行顺序。

    • 代码实现

      假如我们现在商定了一个事件名称为loginFunc,我们来看一下代码实现。

            /***
      /@param registerHandler 要注册的事件名称(这里我们为loginFunc)
      /@param handel 回调block函数 当后台触发这个事件的时候会执行block里面的代码
      ***/
      [_bridge registerHandler:@"loginFunc" handler:^(id data, WVJBResponseCallback responseCallback) {
      // data 后台传过来的参数,例如用户名、密码等 NSLog(@"testObjcCallback called: %@", data); //具体的登录事件的实现,这里的login代表实现登录功能的一个OC函数。
      [self login]; // responseCallback 给后台的回复 responseCallback(@"Response from testObjcCallback");
      }];
  • OC调用JS

    • 什么是OC调用JS

      如果你理解了JS调用OC,那么OC调用JS就应该差不多懂了。同样举个例子,我们的原生APP上有个输入框,我们输入完成后,让它显示在网页上面的用户名处。这样,我们就是OC要实现的一个事件让网页去真正实现了,也就是OC调用JS。

    • OC调用JS

      和JS调用OC的流程大致一样,还是需要和网页编写人员商定出一个事件名,然后在网页里面先把注册这样一个事件并把实现体写好,等到我们OC去触发这个事件(比如点击按钮)就会去网页里面找到这个事件的实现体并执行。

    • 代码实现

      假如我们现在商定了一个注册事件,事件名称为registerFunc,我
      们来代码实现一下

           //不需要传参数,不需要后台返回执行结果
      [_bridge callHandler:@"registerFunc"]; //需要传参数,不需要从后台返回执行结果
      /***
      @param callHandler 商定的事件名称,用来调用网页里面相应的事件实现
      @param data id类型,相当于我们函数中的参数,向网页传递函数执行需要的参数
      ***/ [_bridge callHandler:@"registerFunc" data:@"name"]; //需要传参数,需要从后台返回执行结果 [_bridge callHandler:@"registerFunc" data:@"name" responseCallback:^(id responseData) { NSLog(@"后台执行完成后返回的数据"); }];
  • 发送消息

    • 概述

      我们可以单纯地向JS发送数据,比如我们可以在网页加载完成后向网页发送一条加载完成的消息,或者传一个标题。

    • 代码实现

        //不需要后台返回执行结果或数据
      [_bridge send:@"红色"]; //需要后台返回执行结果或数据
      [_bridge send:@"红色" responseCallback:^(id responseData) { NSLog(@"后台执行完成后返回的数据 %@", responseData); }];

注意点

一定要注意和网页端商定的方法名必须要保证OC代码 里和网页编码里统一。在调用之前,必须要先注册事件,写好实现体。

总结

本文只是简单地介绍了WebViewJavascriptBridge在实际开发中常用的几个方法,还有一些方法没有意义详讲,希望大家在掌握了这几个方法的使用后也去研究一下里面的其他方法。另外,本文重点是让ios工程师能快速使用,一些原理的东西还有JS方面的编码都省略了,可能文中有些地方理解不当或者不够深入,后期会再完善修改.最后,希望大家多提宝贵意见。

大家可去gitHub下载demo查看源码。

WebViewJavascriptBridge的简单应用的更多相关文章

  1. js与ios桥接使用WebViewJavascriptBridge简单理解

    https://github.com/marcuswestin/WebViewJavascriptBridge function setupWebViewJavascriptBridge(callba ...

  2. WebViewJavascriptBridge源码探究--看OC和JS交互过程

    今天把实现OC代码和JS代码交互的第三方库WebViewJavascriptBridge源码看了下,oc调用js方法我们是知道的,系统提供了stringByEvaluatingJavaScriptFr ...

  3. WebViewJavascriptBridge使用说明(iOS)

    由于现在很多产品都是有安卓版跟ios版,就意味着同一样东西要出两套,由两组人去完成,不仅增加了开发成本,也大大加剧了维护成本.聪明的coder想出了跨平台的思路,用html写页面,分别用webview ...

  4. WebViewJavascriptBridge-Obj-C和JavaScript互通消息的桥梁

    转载至:http://www.cocoachina.com/ios/20150629/12248.html 译者:@coderyi9 本文翻译自Marcus Westin的开源框架WebViewJav ...

  5. iOS开发:JavaScriptCore.framework的简单使用--JS与OC的交互篇

    iOS7之后苹果为众猿推出了JavaScriptCore.framework这个框架,这个框架为大家在与JS交互上提供了很大帮助,可以在html界面上调用OC方法并传参,也可以在OC上调用JS方法并传 ...

  6. WebViewJavascriptBridge

    上一篇文章介绍了通过UIWebView实现了OC与JS交互的可能性及实现的原理,并且简单的实现了一个小的示例DEMO,当然也有一部分遗留问题,使用原生实现过程比较繁琐,代码难以维护.这篇文章主要介绍下 ...

  7. iOS WebViewJavascriptBridge初步尝试与图文详细讲解

    JS和OC的交互这是个永恒话题,使用场景也是越来越多,如今一些reactnative.vue框架等,都是在重点结合原生与H5的混合使用. 那么,如何快捷方便的使用两者交互是一个很重要的关键点. 1.传 ...

  8. iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge

    上一篇文章介绍了UIWebView 如何通过WebViewJavascriptBridge 来实现JS 与OC 的互相调用,这一篇来介绍一下WKWebView 又是如何通过WebViewJavascr ...

  9. iOS下JS与OC互相调用(五)--UIWebView + WebViewJavascriptBridge

    WebViewJavascriptBridge是一个有点年代的JS与OC交互的库,使用该库的著名应用还挺多的,目前这个库有7000+star.我去翻看了它的第一版本已经是4年前了,在版本V4.1.4以 ...

随机推荐

  1. 信息收集渠道:文本分享类网站Paste Site

    信息收集渠道:文本分享类网站Paste Site Paste Site是一种专门的文本分享的网站.用户可以将一段文本性质的内容(如代码)上传到网站,然后通过链接分享给其他用户.这一点很类似于现在的优酷 ...

  2. Codeforces Round #321 (Div. 2) Kefa and Park 深搜

    原题链接: 题意: 给你一棵有根树,某些节点的权值是1,其他的是0,问你从根到叶子节点的权值和不超过m的路径有多少条. 题解: 直接dfs一下就好了. 代码: #include<iostream ...

  3. Java实验--关于课上找“水王”问题分析

    问题的表述就是说有那么一个人,他在一个论坛上发帖,然后每贴必回,自己也发帖.那么这个人在发帖的数目上就超过了整个论坛的帖子数目的一半以上. 我对这个问题一开始的思路是,用SQL语句获取整个列表中的数据 ...

  4. AngularJS中使用Directive、Controller、Service

    AngularJS是一款非常强大的前端MVC框架.同时,它也引入了相当多的概念,这些概念我们可能不是太熟悉. (1)Directive 指令 (2)Controller 控制器 (3)Service ...

  5. SQL-基础学习3--通配符:LIKE,%,(_); 拼接:+,||,concat;

    第六课 用通配符进行过滤 6.1  LIKE操作符 通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符.为在搜索子句中使用通配符,必须使用LIKE操作符.LIKE指示DB ...

  6. Android 学习之路和App开发框架

    学习之路: 1. http://www.stormzhang.com/android/2014/07/07/learn-android-from-rookie/ 框架: 2. https://gith ...

  7. iOS开发 ----- 加载动画之牛顿摆的实现

    牛顿摆动画 自己看动画有一段时间了,但是还是不是很能理解其中的一些属性方法之类的东西,琢磨了一下午写了一个牛顿摆的动画,这里记录一下,一遍以后查看先上图 先说下思路 说下牛顿摆的大致运动过程 根据牛顿 ...

  8. JavaSE入门学习6:Java基础语法之运算符和语句(上)

    继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...

  9. sql的一些知识_数据分组

    group by--------按**分组查询 SELECT rank, MIN(weight)as min_weight FROM userinfo GROUP BY rank 对分组的值进行过滤需 ...

  10. SQL_字符操作函数

    原创作品.出自 "深蓝的blog" 博客.欢迎转载,转载时请务必注明下面出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...