iOS与JS交互实战篇(Swift/ObjC)

前言

ObjectiveC与Js交互是常见的需求,可对于新手或者所谓的高手而言,其实并不是那么简单明了。这里只介绍iOS7.0后出来的JavaScriptCore framework。

关于JavaScriptCore

本教程中所涉及到的几种类型:

  • JSContext, JSContext是代表JS的执行环境,通过-evaluateScript:方法就可以执行一JS代码
  • JSValue, JSValue封装了JS与ObjC中的对应的类型,以及调用JS的API等
  • JSExport, JSExport是一个协议,遵守此协议,就可以定义我们自己的协议,在协议中声明的API都会在JS中暴露出来,才能调用

ObjC与JS交互方式

通过JSContext,我们有两种调用JS代码的方法:

  • 1、直接调用JS代码
  • 2、在ObjC中通过JSContext**注入模型**,然后调用模型的方法

直接调用JS代码

 // 一个JSContext对象,就类似于Js中的window,
 // 只需要创建一次即可。
 self.jsContext = [[JSContext alloc] init];

 // jscontext可以直接执行JS代码。
 [self.jsContext evaluateScript:@"var num = 10"];
 [self.jsContext evaluateScript:@"var squareFunc = function(value) { return value * 2 }"];
 // 计算正方形的面积
 JSValue *square = [self.jsContext evaluateScript:@"squareFunc(num)"];

 // 也可以通过下标的方式获取到方法
 JSValue *squareFunc = self.jsContext[@"squareFunc"];
 JSValue *value = [squareFunc callWithArguments:@[@"20"]];
 NSLog(@"%@", square.toNumber);
 NSLog(@"%@", value.toNumber);

这种方式是没有注入模型到JS中的。这种方式使用起来不太合适,通常在JS中有很多全局的函数,为了防止名字重名,使用模型的方式是最好不过了。通过我们协商好的模型名称,在JS中直接通过模型来调用我们在ObjC中所定义的模型所公开的API。

此处省略10000字…

本文内容较多,要完整阅读文章内容,请移步微信公众号文章:iOS与JS交互实战篇(ObjC版)

如果您正在学习Swift或者正在使用Swift开发,可以阅读Swift版的文章:Swift与JS交互实战篇

公众号搜索「iOS开发技术分享」快速关注,微信号:iOSDevShares

QQ群:324400294

你可能感兴趣的:(Webview与JS,ios-native,ios与JS交互,ios与html)