在 iOS/OSX 上的 JavaScriptCore 框架缺少一些您习惯的浏览器对象模型的功能 - setTimeout, XMLHttpRequest 等。此外,许多库需要这样的对象,例如 rx.js 需要setTimeout。
此项目通过 Objective-C 使用原生方式扩展了 JSContext,实现了 BOM 中一些函数
使用 Cocoapods:pod 'JSCoreBom', '~> 1.1'
。
您想在任何时候使用 BOM 函数扩展 JSContext,只需使用
JSContext* context = [[JSContext alloc] init];
[[JSCoreBom shared] extendContext:context];
然后就可以使用它了
[context evaluateScript:@"setTimeout(function(){ console.log('Hi in 5 seconds!')},5000"];
名称 | 描述 | 状态 |
---|---|---|
setTimeout | 使用 dispatch_after 实现 | 已完成 |
console.{info,log,debug,warn,error} | 会将所有信息转发到 NSLog | 已完成 |
XmlHTTPRequest | 使用 NSUrlSession 实现 | 原型已完成 |
您可以指定自定义日志处理程序
[[JSCoreBom shared] extend:context logHandler:^(NSString* logLevel, NSArray* params, NSString* formattedLogEntry) {
if ([logLevel isEqualToString: @"log"])
[MyCustomLogger log:logEntry];
}];
就像苹果在页面 45 所说的那样!
JSContext* context = [[JSContext alloc] init];
context[@"setTimeout"] = ^(JSValue* function, JSValue* timeout) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)([timeout toInt32] * NSEC_PER_MSEC)), dispatch_get_main_queue(), ^{
[function callWithArguments:@[]];
});
};
XmlHTTPRequest