混合开发的重要性不言而喻,一个移动端开发的了解前端开发是一个趋向,总之每个人都向往成为一个全栈工程师,废话不多说,直接上主题

一、交互(UIWebView)

1、OC调用JS

  (1)OC调用代码

  [self.webView stringByEvaluatingJavaScriptFromString:@"ocCallJSFunction({'name':'xiaoxiao'})"];

 (2)JS代码

  </script>
   function ocCallJSFunction(data) {
    var obj = eval(data);
    alert(obj.name);
   }
  <script>

2、JS调用OC

(1)OC代码

  - (void)webViewDidFinishLoad:(UIWebView *)webView {

  JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

  context[@"jsCallOCFunction"] = ^() {

   NSLog(@"JS调用OC成功");

   NSArray *args = [JSContext currentArguments];

  for (JSValue *jsVal in args) {

  NSLog(@"%@", jsVal.toDictionary);

    }

    };

  }

 (2)JS调用代码

  </script>

  var message = {
    'method' : 'hello',
    'param1' : 'dada',
   };
  jsCallOCFunction(message);

  <script>

二、交互(WKWebView)

1、OC调用JS

  (1)OC调用代码

    [self.wkWebView evaluateJavaScript:@"ocCallJSFunction({'name':'xiaoxiao'})" completionHandler:^(id _Nullable obj, NSError * _Nullable error) {

     NSLog(@"evaluateJavaScript, obj = %@, error = %@", obj, error);

   }];

 (2)JS代码

  </script>
   function ocCallJSFunction(data) {
    var obj = eval(data);
    alert(obj.name);
   }
  <script>

2、JS调用OC

(1)OC代码

  // 初始化WKWebView

  WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];

  [config.userContentController addScriptMessageHandler:self name:@"jsCallOCFunction"];

WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];

  

  #pragma mark - WKScriptMessageHandler

  - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {

  NSLog(@"name = %@",message.name);

  NSLog(@"body = %@",message.body);

   NSLog(@"frameInfo = %@",message.frameInfo);

  }

 (2)JS调用代码

  </script>

  var message = {
    'method' : 'hello',
    'param1' : 'dada',
   };
  window.webkit.messageHandlers.jsCallOCFunction.postMessage(message);

  <script>

三、交互(WebViewJavascriptBridge)

功能总结:

OC调JS调用成功,JS可以回调数据到OC

JS调OC调用成功,OC可以回调数据到JS

1、OC调用JS

  (1)OC调用代码

  _bridge = [WebViewJavascriptBridge bridgeForWebView:wkWebView];

  id data = @{@"name" : @"xiaoxiao"};

  [_bridge callHandler:@"ocCallJSFunction" data:data responseCallback:^(id response) {

   NSLog(@"这里是OC调用JS成功后,JS回调的参数:%@", response);

  }];

 (2)JS代码

  </script>

  // 注册JS方法供OC调用
  bridge.registerHandler('ocCallJSFunction', function(data, responseCallback) {
    var obj = eval(data);
    alert(obj.userId);

    var responseData = { 'code':'200' }
    responseCallback(responseData)
  })

  <script>

2、JS调用OC

(1)OC代码

  [_bridge registerHandler:@"jsCallOCFunction" handler:^(id data, WVJBResponseCallback responseCallback) {

NSLog(@"JS传过来的参数: %@", data);

responseCallback(@"这是JS调用OC成功后,OC回调的参数");

}];

 (2)JS调用代码

  // JS调用OC注册的方法
  bridge.callHandler('jsCallOCFunction', {'name':'dada'}, function responseCallback(responseData) {

    alert(responseData);
  })

iOS JS与原生交互(全集)的更多相关文章

  1. iOS JS 和 OC交互 / JS 和 native 相互调用

    现在app 上越来越多需求是通过UIWebView 来展示html 或者 html5的内容, js 和 native OC代码交互 就非常常见了. js 调用 native  OC代码 第一种机制 ( ...

  2. Android 中 js 和 原生交互

    Android中的WebView 中加载的URL 默认是在手机浏览器中加载的,我们可以覆盖这种默认的动作,让网页在WebView中打开.通过设置WebView的WebViewClent 达到这个效果. ...

  3. iOS: JS和Native交互的两种方法

    背景: UIWebView: iOS 用来展示 web 端内容的控件. 1. 核心方法: - (NSString*)stringByEvaluatingJavaScriptFromString:(NS ...

  4. iOS开发--JS调用原生OC篇

    JS调用原生OC篇 方式一(反正我不用) 第一种方式是用JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理. 我写了一个简单的HTML网页和一个btn点击 ...

  5. iOS下JS与原生OC互相调用(总结)

    这是去年总结的一篇文章,也一并先放到这个目录下好了. iOS开发免不了要与UIWebView打交道,然后就要涉及到JS与原生OC交互,今天总结一下JS与原生OC交互的两种方式. JS调用原生OC篇 方 ...

  6. iOS下JS与原生的交互一

    本篇主要讲的是UIWebView和JS的交互,在下一节会有wkWebView和JS交互的详解https://www.cnblogs.com/llhlj/p/9144110.html JS调用原生OC ...

  7. 转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC ----->JS

      目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 ...

  8. iOS JS 交互之利用系统JSContext实现 JS调用OC方法以及Objective-C调用JavaScript方法

    ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色 ...

  9. iOS JS 交互之利用系统JSContext实现 JS调用oc方法

    ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择如下操作,(拖入的文件夹是蓝色的, ...

随机推荐

  1. linux中的系统服务--daemon

    简单的说,系统为了某些功能必须要提供一些服务 (不论是系统本身还是网络方面),这个服务就称为 service . 但是 service 的提供总是需要程序的运行吧!否则如何运行呢?所以达成这个 ser ...

  2. Atitit.隔行换色  变色 css3 结构性伪类选择器

    Atitit.隔行换色  变色 css3 结构性伪类选择器 1.1. css3隔行换色扩展阅读 1 1.2. 结构伪选择器 1 1.3. jQuery 选择器2 1.1. css3隔行换色扩展阅读 原 ...

  3. Vivado的helloword程序:硬件工程部分

    硬件平台:ZedBoard软件平台:vivado2013.3 本示例通过综合.实现,生成比特流,发送到SDK实现.启动vivado并且创建一个项目根据提示操作一步步创建新项目的时候记得选择RTL Pr ...

  4. 安装Eclipse插件长时间卡在 calculating requirements and dependencies

    把"Contact all update sites during install to find required software"前面的勾去掉,然后点击下一步,这样之后问题迎 ...

  5. java 容器结构

    先来看下层次关系. 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 Collection(接口)├──List(接口)│   ├──LinkedList(实现类)│   ├ ...

  6. 反射学习1、反射机制的介绍和基本的API的使用

    关于动态语言: 一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”.从这个观点看,Perl,Python,Ruby是动态语言,C+ ...

  7. 李洪强和你一起学习前端之(5)css书写位置 优先级和伪类

    亲爱的,时间过得真快,不知不觉我们一起学习前端已经4天了,这4天的时间里,我们是不是收获很大呢,每当我们学习一个新的知识点的时候,每当我们做出一个新的东西来的时候,我们是不是欣喜若狂,世界从来否不会辜 ...

  8. JSON资料整理(转载)

    目录 1.什么是json 2.json语法规则 3.json基础结构 4.json基础示例 5.JSON和XML比较 6. .NET操作JSON 原始方式 通用方式 内置方式 契约方式 通过序列化将. ...

  9. socket编程头文件分析

    在socket网络编程中经常用到一些宏定义.结构和函数,这些经常包含在相关的头文件中,使用时直接include相关头文件即可.下面简单描述下相关的一些结构及头文件. 1. sockaddr  / bi ...

  10. 完整的jdbc查询结果集编码

    public static ArrayList<HashMap<String,Object>> query(Connection conn,String sql, Object ...