如何使用 JavascriptCore 将 class 分配给变量
How to assign a class to a variable with JavascriptCore
我正在尝试为 iOS 使用 JavascriptCore 框架,但我遇到了问题。
我简单的javascript文字:
NSString * jsCode = @"var log = require('log'); log.test();";
我的 Obj-c 代码:
JSContext * context = [[JSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]];
context[@"require"] = ^(NSString* sting) {
NSLog(@"require ok");
return [JsLogFacade class];
};
[context evaluateScript:jsCode];
我想做的就是将我的 JsLog class 分配给 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 语句,"require ok" 会起作用。
PS : 我不能只执行下面的代码,因为我不知道脚本最后的代码是什么
context[@"log"]=[JsLogFacade class];
你知道为什么我想做的事情是可能的吗?
您不应该将上下文条目分配为记录器的实例吗?如:
context[@"log"]=[[JsLogFacade alloc] init];
或在您的要求代码中返回实例而不是 class?
功能测试不应该是实例方法而不是 class 方法吗?
@implementation JsLogFacade
- (void) test
{
NSLog(@"It's working");
}
@end
我正在尝试为 iOS 使用 JavascriptCore 框架,但我遇到了问题。
我简单的javascript文字:
NSString * jsCode = @"var log = require('log'); log.test();";
我的 Obj-c 代码:
JSContext * context = [[JSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]];
context[@"require"] = ^(NSString* sting) {
NSLog(@"require ok");
return [JsLogFacade class];
};
[context evaluateScript:jsCode];
我想做的就是将我的 JsLog class 分配给 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 语句,"require ok" 会起作用。
PS : 我不能只执行下面的代码,因为我不知道脚本最后的代码是什么
context[@"log"]=[JsLogFacade class];
你知道为什么我想做的事情是可能的吗?
您不应该将上下文条目分配为记录器的实例吗?如:
context[@"log"]=[[JsLogFacade alloc] init];
或在您的要求代码中返回实例而不是 class?
功能测试不应该是实例方法而不是 class 方法吗?
@implementation JsLogFacade
- (void) test
{
NSLog(@"It's working");
}
@end