JSCoreBom 1.1.1

JSCoreBom 1.1.1

测试测试过
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2014年12月

Artem Yarulin 维护。



JSCoreBom 1.1.1

  • Artem Yarulin

在 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

  • 始终同步调用使用 NSURLConnection,而不是 NSUrlSession