在认识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可以转化为任意类型了。注意传参一定要用“\”隔开。
网友评论