如何使用JavascriptCore将类分配给变量

时间:2015-02-23 11:57:26

标签: ios objective-c javascriptcore

我试图在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];

你知道为什么,甚至我试图做什么是可能的?

1 个答案:

答案 0 :(得分:1)

您是否应该将上下文条目指定为记录器的实例?如:

context[@"log"]=[[JsLogFacade alloc] init];

或在require代码中返回实例而不是类?

并且函数test应该不是实例方法而不是类方法吗?

@implementation JsLogFacade
- (void) test 
{
    NSLog(@"It's working");
}
@end