我试图在iOS上使用JavascriptCore框架,但我遇到了问题。
我简单的javascript文字:
NSString * jsCode = @"var log = require('log'); log.test();";
我的对象代码:
JSContext * context = [[JSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]];
context[@"require"] = ^(NSString* sting) {
NSLog(@"require ok");
return [JsLogFacade class];
};
[context evaluateScript:jsCode];
我想要做的就是将我的JsLog类分配到我的javascript中的log
变量,这样我就可以评估log.test()
。
JsLogFacade.h
#import <Foundation/Foundation.h>
#import <JavaScriptCore/JSExport.h>
@protocol LogJsExports<JSExport>
+ (void) test;
@end
@interface JsLogFacade : NSObject <LogJsExports>
@end
JsLogFacade.m
#import "JsLogFacade.h"
@implementation JsLogFacade
+ (void) test {
NSLog(@"It's working");
}
@end
我没有错误,但我没有看到我的NSLog。请注意,如果我在块中删除了return语句,&#34;要求确定&#34;的工作原理。
PS:我不能只执行下面的代码,因为我不知道最后我的脚本中的代码是什么
context[@"log"]=[JsLogFacade class];
你知道为什么,甚至我试图做什么是可能的?
答案 0 :(得分:1)
您是否应该将上下文条目指定为记录器的实例?如:
context[@"log"]=[[JsLogFacade alloc] init];
或在require代码中返回实例而不是类?
并且函数test应该不是实例方法而不是类方法吗?
@implementation JsLogFacade
- (void) test
{
NSLog(@"It's working");
}
@end