TestsTested | ✓ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Oct 2017 |
Maintained by Lukas Stuehrk.
In iOS 7, Apple introduced the possibility to [execute JavaScript via the JavaScriptCore JavaScript
engine] (http://nshipster.com/javascriptcore/). Unfortunately, JavaScriptCore is missing some
objects and functions a JavaScript environment of a browser would have. Especially the
XMLHttpRequest
(see the [Mozilla documentation]
(https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) object needed for AJAX requests
is not provided by JavaScriptCore. This library implements this missing object, 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 XMLHttpRequest specification. Currently not all
functionality is implemented yet. The current limitations are:
onload
and onerror
callbacks are currently not supported.upload
callback is currently not supported.timeout
property is currently not supported.It is planned to support all functionality of the HTML5 specification at some point.
Create a new instance of the XMLHTTPRequest
class. Then call the extend:
method and pass either
a JSContext
instance or a JSValue
instance. The given object will be extend with the
XMLHTTPRequest
object.
#import <XMLHTTPRequest/XMLHTTPRequest.h>
...
JSContext *jsContext = [JSContext new];
XMLHttpRequest *xmlHttpRequest = [XMLHttpRequest new];
[xmlHttpRequest extend:jsContext];
The JavaScript context now has a XMLHTTPRequest object you can use like the object found in
browsers. Example (JavaScript):
request.open('GET', 'http://example.com');
request.setRequestHeader('Accept', 'text/html');
request.setRequestHeader('X-Foo', 'bar');
request.send();
If you are interested in more polyfills for missing browser functionality in JavaScriptCore, there is
a window timers implementation (setTimeout
, setInterval
, ...) called [WindowTimers]
(https://github.com/Lukas-Stuehrk/WindowTimers).