oc与js的交互

在认识JavaScriptCore之前,我一直以为oc和js的交互一定要通过webview才能实现,下面直接请看代码。
1,我们需要获取文件路径和读取文件内容

 NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"pwd-encryption"ofType:@"js"];
     NSString *jsMethod = [NSString stringWithContentsOfFile:jsPath encoding:NSUTF8StringEncoding error:nil];

2.创建一个JSContext对象,然后将js代码加载到context里面并且读取这个函数对象。

SContext *context = [[JSContext alloc] init];
        JSValue *jsVal = [context evaluateScript:jsMethod];
 NSString * jsText =
        @"var doEncrypt = function(a,b) {"
        @"var f = b;"
        @"var i = a;"
        @"var g = i;"
        @"i += \"\" + f;"
        @"try {"
        @"g = new RSAKey().encrypt(i)"
        @"} catch (h) {"
        @"return h;"
        @"}"
        @"return g;"
        @"};";
 jsVal = [context evaluateScript:jsText];

3.最后调用callWithArguments这个方法进行参数传值。

NSString * pwd = [NSString stringWithFormat:@"\"%@\"",@"506121"];
        NSString * code = [NSString stringWithFormat:@"\"%@\"",@"1324465"];
        jsVal = [context[@"doEncrypt"] callWithArguments:@[pwd, code]];

获取到的这个jsVal可以转化为任意类型了。注意传参一定要用“\”隔开。

你可能感兴趣的:(oc与js的交互)