目标

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

  • OC调用网页上的js方法
  • 网页js调用APP中的OC方法

JavaSciptCore.framework框架介绍

JavaScriptCore是webkit的一个重要组成部分,主要是对js进行解析和提供执行环境。
具体介绍请看这篇简书的文章:JavaScriptCore 使用

准备环境

  • 创建一个名为JS与OC交互Demo的iOS工程。然后在storyboard添加一个UIWebVeiw,并设置上下左右约束为0,背景设为白色。
  • 刚才创建的webView作为ViewController的属性。用webView加载百度界面
  • 编写html文件
    由于没有现成的网页能够符合我们这篇文章的需求,所以楼主自己做了一个本地的html文件。作为我们的素材。
<!DOCTYPE html>
<html lang="en"> <head>
    <meta charset="utf-8">
    <title>JS与OC交互</title>     <!--  定义js函数  -->
    <script type="text/JavaScript">
        function test1()
        {
            alert("我是被OC调用的js方法")
        }
    </script> </head>
<body>
    <br /><br /><br /><br />     <!-- 创建一个按钮,点击就调用  printHelloWorld()  方法 -->
    <button onclick="printHelloWorld()">在Xcode控制台打印HelloWold</button> </body>
</html>

html的代码很简单
首先是在head里面定义了一个js函数test1()。调用这个函数会弹出一个alert窗口。

<!--  定义js函数  -->
    <script type="text/JavaScript">
        function test1()
        {
            alert("我是被OC调用的js方法")
        }
    </script>

body里面创建了一个按钮,点击按钮会调用printHelloWorld()方法。这里没有定义这个方法的实现,等下我们会在OC代码中定义

    <!-- 创建一个按钮,点击就调用 printHelloWorld()   函数 -->
    <button onclick=" printHelloWorld() ">在Xcode控制台打印HelloWold</button>

好了,现在我们可以加载这个本地html文件了。

//
//  ViewController.m
//  JS与OC交互Demo
//
//  Created by 石学谦 on 16/7/9.
//  Copyright © 2016年 shixueqian. All rights reserved.
// #import "ViewController.h" @interface ViewController ()<UIWebViewDelegate> //webView
@property (weak, nonatomic) IBOutlet UIWebView *webView; @end @implementation ViewController - (void)viewDidLoad {
    [super viewDidLoad];     //设置webView代理
    self.webView.delegate = self;     //获取本地html路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"index.html" ofType:nil];
    //中文路径要转码
    path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];     //加载html
    NSURL *url = [NSURL URLWithString:path];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request]; } -(void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"网页加载完成");
} @end

环境准备完成,开工

OC调用网页上的JS方法

我们的html文件定义了一个js方法test1(),现在我们就来调用这个方法

  • 先导入JavaScriptCore.framework。工程->Build Phases->Link Binary With Libraries->点击“+”->输入“JavaScriptCore”->Add

  • 在ViewController.m导入头文件#import <JavaScriptCore/JavaScriptCore.h>。

  • 写代码

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"网页加载完成");     [self demo1];
} - (void)demo1 {
    //创建JSContext对象,(此处通过当前webView的键获取到jscontext)
    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.JavaScriptContext"];     //OC调用JS方法
    [context evaluateScript:@"test1()"];
}
  • 运行之后会弹出一个alert窗口,证明html上的js方法test1被调用了

  • 上面的代码都是无参的,加入是有参数的呢?
    我们在html文件中加一个js方法test3(a,b)。方法有两个参数。

      <!--  定义js函数  -->
      <script type="text/JavaScript">
          function test3(a,b)
          {
              alert("我是被OC调用的js方法" + a + b)
          }
      </script>

    然后在ViewController.m里面调用

-(void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"网页加载完成"); //    [self demo1];
    [self demo2];
} //OC调用有多个参数的JS方法
- (void)demo2 {
    //创建JSContext对象
    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.JavaScriptContext"];
    [context evaluateScript:@"test1(/"我是参数a/",/"我是参数b/")"];
}

运行结果为:

  • 上面是OC调用html中定义的JS方法。我们还可以在iOS程序里面写一段JS代码来调用。
-(void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@"网页加载完成"); //    [self demo1];
//    [self demo2];
    [self demo3];
} //OC调用OC代码写出来的js方法
- (void)demo3 {
    //创建JSContext对象
    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.JavaScriptContext"];
    //JS代码
    NSString *jsCode = [NSString stringWithFormat:@"alert(/"我是OC里面的js方法/")"];     //OC调用JS方法
    [context evaluateScript:jsCode];
}

运行结果如下:

转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC ----->JS的更多相关文章

  1. [转载]iOS开发之手势识别

    感觉有必要把iOS开发中的手势识别做一个小小的总结.在上一篇iOS开发之自定义表情键盘(组件封装与自动布局)博客中用到了一个轻击手势,就是在轻击TextView时从表情键盘回到系统键盘,在TextVi ...

  2. IOS开发之——objective-c与javascript交互

    原文:http://blog.csdn.net/pjk1129/article/details/6936545 在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要 ...

  3. 转载iOS开发中常见的警告及错误

    iOS警告收录及科学快速的消除方法     前言:现在你维护的项目有多少警告?看着几百条警告觉得心里烦么?你真的觉得警告又不是错误可以完全不管么? 如果你也被这些问题困惑,可以和我一起进行下面的操作. ...

  4. [转载] iOS开发分辨率那点事

    1 iOS设备的分辨率 iOS设备,目前最主要的有3种(Apple TV等不在此讨论),按分辨率分为两类 iPhone/iPod Touch 普屏分辨率    320像素 x 480像素 Retina ...

  5. 转载 IOS开发之---static变量

    Objective-C 支持全局变量 主要有两种实现方式: (1)第一种和C/C++中的一样, 使用"extern"关键词: (2)另外一种就是使用单例实现. (比如我们经常会把一 ...

  6. iOS开发 - Swift使用JavaScriptCore与JS交互

    一.前言 在这个提倡敏捷开发和H5横行的年代,原生App内嵌入一些H5页面已经成为一种流行的趋势.一套H5页面就可以适配复杂的iOS和Android页面,大量节省了开发和维护时间,如果本来就有移动端网 ...

  7. iOS与Html5和JS之间的交互---学习笔记五

    首先采用的框架是WebViewJavascriptBridge,采用这套框架可以方便的使iOS与JS交互 一. 流程图(主要介绍思路) 二.iOS端如何使用 首先导入#import "Web ...

  8. iOS开发学习概述及知识整理

    设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了.这个界面模仿了Evernote iOS app的风格. 我以迅雷不及掩耳盗铃之势开始在Xcode上编程,用 ...

  9. 那些在学习iOS开发前就应该知道的事(part 1)

    英文原文:Things I wish I had known before starting iOS development—Part 1 http://www.cocoachina.com/ios/ ...

随机推荐

  1. webpack2.x基础属性讲解

    webpack作为构建工具平时作为前端作为优化.模块编程.和分片打包的重要组成部分,大家可能并不陌生,如果没有时刻的去关注文档,那么大家可能不太清楚webpack已经默默然的升级到2.x了,对比1.x ...

  2. java随机生成汉字

    public static void main(String[] args) { String str = null; int hs, ls; Random random = new Random() ...

  3. eclipse自动添加作者、日期等注释

    使用eclipse的时候一般会添加自己的注释,标注日期作者等内容,我总结的添加注释的方式有两种:一.在新建class时自动添加注释:二.通过快捷键自动添加注释.下面分别描述一下添加方式. 一.新建cl ...

  4. PS如何为图片添加四面投影

    如图所示,像四周的投影 很像Areo效果的Windows7. 用这样的图片做成PNG透明的效果非常好. 我们不妨仔细研究上图的两个角,发现其实只是简单的投影效果而已. 简单的使用投影效果即可.注意混合 ...

  5. 利用gulp构建你的项目

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码,而且大 ...

  6. Mysql的建表规范与注意事项

    一. 表设计规范 库名.表名.字段名必须使用小写字母,“_”分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用InnoDB存储引擎. 存储 ...

  7. 【转】 IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人

    本文转载于:https://blog.csdn.net/qq_27093465/article/details/52918873 刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便 ...

  8. Burp Suite安装&环境配置&启动&浏览器设置代理

    一.简述 Burp Suite是一款使用Java编写的,用于Web安全审计与扫描套件.它集成了诸多实用的小工具以完成http请求的转发/修改/扫描等,同时这些小工具之间还可以 互相协作,在BurpSu ...

  9. Tomcat Https配置

    一.生成KeyStore 打开命令行,输入:keytool -genkey -alias tomcat_server -keyalg RSA -storepass jimmypwd -validity ...

  10. ios侧滑返回:完美解决 interactivePopGestureRecognizer 卡住的问题

    interactivePopGestureRecognizer是iOS7推出的解决VeiwController滑动后退的新功能,虽然很实用,但是坑也很多啊(比如在rootViewcontroller下 ...