TestsTested | ✓ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Feb 2015 |
Maintained by Lukas Stuehrk.
In iOS 7, Apple introduced the possibility to execute JavaScript via the JavaScriptCore JavaScript
engine. Unfortunately, JavaScriptCore is missing some
objects and functions a JavaScript environment of a browser would have. Especially the methods
described in the WTWindowTimers specification, such as setTimeout
or
setInterval
are not provided. This library implements those methods, so it is possible to use
JavaScript libraries which were originally developed for in-browser use in your Objective-C
(or Swift) application without the need to use a hidden WebView.
This library tries to implement the full specification fo the Window Timers, including passing a
string as first argument to setTimeout
or setInterval
or passing additional arguments to both
mentioned functions.
Create a new instance of the WTWindowTimers
class. Then call the extend:
method and pass either
a JSContext
instance or a JSValue
instance. The given object will be extend with the functions.
#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.