RN中JavaScriptCore的介绍

其实都是从袁峥Seemygo 这里学来的。

1、OC获取定义在JS中的变量,并通过OC直接修改JS中变量的值
-(void)getJSVar{
    //创建JS代码
    NSString *jsCode = @"var arr = [1,2,3]";
    //创建js运行环境
    JSContext *ctx = [[JSContext alloc]init];
    //执行JS代码
    [ctx evaluateScript:jsCode];
    //执行完JS代码之后,获取JS变量,可以使用JSContext通过变量名称获取
    JSValue *jsArr = ctx[@"arr"];
    
    jsArr[0] = @5;
    
    NSLog(@"%@",jsArr);
    
}

2017-04-01 09:49:44.809 React Native[12515:2883299] 5,2,3
2、OC调用JS方法,并获取返回结果
-(void)ocCallJSFunc{
    NSString *jsCode = @"function hello(say){"
    "return say;"
    "}";
    
    JSContext *ctx = [[JSContext alloc]init];
    
    [ctx evaluateScript:jsCode];
    
    JSValue *hello = ctx[@"hello"];//使用JSContext通过函数名称获取
    
    JSValue *res = [hello callWithArguments:@[@"hello"]];//这里的参数需要一个数组
    
    NSLog(@"%@",res);
    
}
2017-04-01 10:08:56.561 React Native[12553:2898397] hello
3、JS调用OC中不带参数的block

-(void)jsCallOCBlockWithoutArguments{
    JSContext *ctx = [[JSContext alloc]init];
    
    NSString *jsCode = @"eat()";
    
    ctx[@"eat"] = ^(){
        NSLog(@"吃");
    };
    
    [ctx evaluateScript:jsCode];
}
2017-04-01 10:24:14.918 React Native[12596:2906751] 吃
4、JS调用OC中带参数的block
-(void)jsCallBlockWithArguments{
    JSContext *ctx = [[JSContext alloc]init];
    
    ctx[@"eat"] = ^(){
        NSArray *arguments = [JSContext currentArguments];
        NSLog(@"吃%@",arguments[0]);
    };
    
    NSString *jsCode = @"eat('面包')";//注意'面包'
    
    [ctx evaluateScript:jsCode];
    
}
2017-04-01 10:31:18.915 React Native[12625:2912073] 吃面包

5、JS调用OC 自定义类
 在JS中并没有OC的类,需要在JS中生成OC的类,以及JS中的属性和方法也要在JS中生成

  • 步骤:
  • 自定义协议:
#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>

@protocol PersonJSExport <JSExport>
@property (nonatomic,strong)NSString *name;

-(void)play;

JSExportAs(playGame,-(void)playWithGame:(NSString *)game time:(NSString *)time);
@end
  • 自定义类
#import "PersonJSExport.h"

@interface Person : NSObject<PersonJSExport>
@property (nonatomic,strong)NSString *name;
-(void)playWithGame:(NSString *)game time:(NSString *)time;

@end

#import "Person.h"

@implementation Person
-(void)play{
    NSLog(@"%@玩",_name);
}

-(void)playWithGame:(NSString *)game time:(NSString *)time{
    NSLog(@"%@在%@玩%@",_name,time,game);
}
@end
  • JS调用自定义的类
-(void)jsCallCustonClass{
    Person *p = [[Person alloc]init];
    p.name =@"mudy";
    
    JSContext *ctx = [[JSContext alloc]init];
    ctx[@"onePerson"] = p;
    
    NSString *jsCode = @"onePerson.playGame('王者荣耀','凌晨')";
//    NSString *jsCode = @"onePerson.play()";
    [ctx evaluateScript:jsCode];
}
2017-04-01 13:07:22.802 React Native[12952:2993038] mudy在凌晨玩王者荣耀
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 原创文章转载请注明出处,谢谢 相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结。iOS...
    北辰明阅读 7,648评论 6 60
  • 本文由我们团队的 纠结伦 童鞋撰写。 写在前面 本篇文章是对我一次组内分享的整理,大部分图片都是直接从keynot...
    知识小集阅读 15,220评论 11 172
  • 知道含羞草的那年,我八岁。同学付菲在作文里写道“用手指一碰,它的叶子就蜷缩起来了,就好像害羞的小女孩”。那是多么神...
    锦音美兰阅读 321评论 3 2
  • 不知道在多久的未来,你还会记得我, 不知道在多久的未来,我们还能再相聚。 不知道在多久的未来,我们能彼此的相望。 ...
    北辰牧宸阅读 158评论 0 0