在 iOS 7 中,Apple 引入了通过 JavaScriptCore JavaScript 引擎执行 JavaScript 的可能性。不幸的是,JavaScriptCore 缺少一些浏览器 JavaScript 环境所具有的对象和函数。特别是 WTWindowTimers 规范 中描述的方法,如 setTimeout
或 setInterval
并未提供。这个库实现了这些方法,因此可以在 Objective-C(或 Swift)应用程序中无需使用隐藏的 WebView 就可以使用原本为浏览器使用的 JavaScript 库。
此库试图实现 Window Timers 的完整规范,包括将字符串作为第一个参数传递给 setTimeout
或 setInterval
或传递额外的参数给这两个函数。
创建一个 WTWindowTimers
类的新实例。然后调用 extend:
方法,并传递一个 JSContext
实例或一个 JSValue
实例。给定对象将扩展这些函数。
#import <WindowTimers/WindowTimers.h>
...
JSContext *jsContext = [JSContext new];
WTWindowTimers *timers = [WTWindowTimers new];
[timers extend:jsContext];
// Now jsContext has the additional functions setTimeout, clearTimeout, setInterval, clearInterval
jsContext[@"callCounter"] = @0;
[jsContext evaluateScript:@"setTimeout(function(){callCounter += 1;}, 1000);"];
// Run the main loop for at least 1.1 seconds so we make sure that the callback is executed.
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.2]];
NSLog(@"callCounter is %@", jsContext[@"callCounter"]); // Will log 1.