add DoricJSEngine
This commit is contained in:
parent
bc1c283b47
commit
f87aea62dc
@ -37,7 +37,7 @@ public class DoricConstant {
|
|||||||
"\nreturn __module.exports;" +
|
"\nreturn __module.exports;" +
|
||||||
"},this,[{exports:{}}])" +
|
"},this,[{exports:{}}])" +
|
||||||
"])";
|
"])";
|
||||||
public static final String TEMPLATE_CONTEXT_DESTROY = "doric.jsRelease(%s)";
|
public static final String TEMPLATE_CONTEXT_DESTROY = "doric.jsRelease(\"%s\")";
|
||||||
public static final String GLOBAL_DORIC = "doric";
|
public static final String GLOBAL_DORIC = "doric";
|
||||||
public static final String DORIC_CONTEXT_RELEASE = "jsReleaseContext";
|
public static final String DORIC_CONTEXT_RELEASE = "jsReleaseContext";
|
||||||
public static final String DORIC_CONTEXT_INVOKE = "jsCallEntityMethod";
|
public static final String DORIC_CONTEXT_INVOKE = "jsCallEntityMethod";
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
#import "DoricConstant.h"
|
#import "DoricConstant.h"
|
||||||
|
|
||||||
NSString * const DORIC_BUNDLE_SANBOX = @"";
|
NSString * const DORIC_BUNDLE_SANDBOX = @"doric-sandbox";
|
||||||
NSString * const DORIC_BUNDLE_LIB = @"doric-lib.js";
|
NSString * const DORIC_BUNDLE_LIB = @"doric-lib";
|
||||||
NSString * const DORIC_MODULE_LIB = @"./index";
|
NSString * const DORIC_MODULE_LIB = @"./index";
|
||||||
|
|
||||||
|
|
||||||
@ -20,26 +20,26 @@
|
|||||||
|
|
||||||
NSString * const TEMPLATE_CONTEXT_CREATE = @"Reflect.apply("
|
NSString * const TEMPLATE_CONTEXT_CREATE = @"Reflect.apply("
|
||||||
"function(doric,context,Entry,require,exports){" "\n"
|
"function(doric,context,Entry,require,exports){" "\n"
|
||||||
"%s" "\n"
|
"%@" "\n"
|
||||||
"},doric.jsObtainContext(\"%s\"),["
|
"},doric.jsObtainContext(\"%@\"),["
|
||||||
"undefined,"
|
"undefined,"
|
||||||
"doric.jsObtainContext(\"%s\"),"
|
"doric.jsObtainContext(\"%@\"),"
|
||||||
"doric.jsObtainEntry(\"%s\"),"
|
"doric.jsObtainEntry(\"%@\"),"
|
||||||
"doric.__require__"
|
"doric.__require__"
|
||||||
",{}"
|
",{}"
|
||||||
"])";
|
"])";
|
||||||
|
|
||||||
NSString * const TEMPLATE_MODULE = @"Reflect.apply(doric.jsRegisterModule,this,["
|
NSString * const TEMPLATE_MODULE = @"Reflect.apply(doric.jsRegisterModule,this,["
|
||||||
"\"%s\","
|
"\"%@\","
|
||||||
"Reflect.apply(function(__module){"
|
"Reflect.apply(function(__module){"
|
||||||
"(function(module,exports,require){" "\n"
|
"(function(module,exports,require){" "\n"
|
||||||
"%s" "\n"
|
"%@" "\n"
|
||||||
"})(__module,__module.exports,doric.__require__);"
|
"})(__module,__module.exports,doric.__require__);"
|
||||||
"\nreturn __module.exports;"
|
"\nreturn __module.exports;"
|
||||||
"},this,[{exports:{}}])"
|
"},this,[{exports:{}}])"
|
||||||
"])";
|
"])";
|
||||||
|
|
||||||
NSString * const TEMPLATE_CONTEXT_DESTROY = @"doric.jsRelease(%s)";
|
NSString * const TEMPLATE_CONTEXT_DESTROY = @"doric.jsRelease(\"%@\"";
|
||||||
|
|
||||||
NSString * const GLOBAL_DORIC = @"doric";
|
NSString * const GLOBAL_DORIC = @"doric";
|
||||||
|
|
||||||
|
@ -30,24 +30,34 @@ -(instancetype)init {
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)initDoricEnvironment {
|
-(void)initJSExecutor {
|
||||||
[self.jsExecutor injectGlobalJSObject:INJECT_LOG obj:^(NSString * type, NSString * message){
|
[self.jsExecutor injectGlobalJSObject:INJECT_LOG obj:^(NSString * type, NSString * message){
|
||||||
DoricLog(@"JS:%@",message);
|
DoricLog(@"JS:%@",message);
|
||||||
}];
|
}];
|
||||||
[self.jsExecutor injectGlobalJSObject:INJECT_REQUIRE obj:^(NSString *name){
|
[self.jsExecutor injectGlobalJSObject:INJECT_REQUIRE obj:^(NSString *name){
|
||||||
|
|
||||||
}];
|
}];
|
||||||
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:@"doric-sandbox" ofType:@"js"];
|
|
||||||
NSString *mainjs = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
|
|
||||||
NSLog(@"read:%@",mainjs);
|
|
||||||
[self.jsExecutor loadJSScript:@"nativeLog('w','log from js')" source:@""];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(void)initDoricEnvironment {
|
||||||
|
[self loadBuiltinJS:DORIC_BUNDLE_SANDBOX];
|
||||||
|
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:DORIC_BUNDLE_LIB ofType:@"js"];
|
||||||
|
NSString *jsContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
|
||||||
|
[self.jsExecutor loadJSScript:[self packageModuleScript: DORIC_MODULE_LIB content:jsContent]
|
||||||
|
source: [@"Module://" stringByAppendingString:DORIC_MODULE_LIB]];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)loadBuiltinJS:(NSString *)fileName {
|
||||||
|
NSString *path = [[NSBundle bundleForClass:[self class]] pathForResource:DORIC_BUNDLE_SANDBOX ofType:@"js"];
|
||||||
|
NSString *jsContent = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
|
||||||
|
[self.jsExecutor loadJSScript:jsContent source:[@"Assets://" stringByAppendingString:fileName]];
|
||||||
|
}
|
||||||
|
|
||||||
-(void)invokeDoricMethod:(NSString *)method,... {
|
-(void)invokeDoricMethod:(NSString *)method,... {
|
||||||
NSMutableArray *array = [[NSMutableArray alloc] init];
|
NSMutableArray *array = [[NSMutableArray alloc] init];
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, method);
|
va_start(args, method);
|
||||||
JSValue *arg = va_arg(args, JSValue *);
|
id arg = va_arg(args, id);
|
||||||
while(arg!=nil){
|
while(arg!=nil){
|
||||||
[array addObject:arg];
|
[array addObject:arg];
|
||||||
arg = va_arg(args, JSValue *);
|
arg = va_arg(args, JSValue *);
|
||||||
@ -56,5 +66,24 @@ -(void)invokeDoricMethod:(NSString *)method,... {
|
|||||||
[self.jsExecutor invokeObject:GLOBAL_DORIC method:method args:array];
|
[self.jsExecutor invokeObject:GLOBAL_DORIC method:method args:array];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-(NSString *)packageContextScript:(NSString *)contextId content:(NSString *)content {
|
||||||
|
NSString *ret = [NSString stringWithFormat:TEMPLATE_CONTEXT_CREATE, content, contextId, contextId, contextId];
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSString *)packageModuleScript:(NSString *)moduleName content:(NSString *)content {
|
||||||
|
NSString *ret = [NSString stringWithFormat:TEMPLATE_MODULE, moduleName, content];
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)prepareContext:(NSString *)contextId script:(NSString *)script source:(NSString *)source {
|
||||||
|
[self.jsExecutor loadJSScript:[self packageContextScript:contextId content:script]
|
||||||
|
source:[@"Context://" stringByAppendingString:source]];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)destroyContext:(NSString *)contextId {
|
||||||
|
[self.jsExecutor loadJSScript:[NSString stringWithFormat:TEMPLATE_CONTEXT_DESTROY, contextId]
|
||||||
|
source:[@"_Context://" stringByAppendingString:contextId]];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
Reference in New Issue
Block a user