I am trying to use one of the new iOS7 features - JavaScriptCore Framework. I can successfully output the helloWorld string from Javascript, but what interests me is doing the HTTP POST in Javascript and then passing the response to Objective-C. Unfortunately, when I create an XMLHttpRequest object in Javascript, I get EXC_BAD_ACCESS (code=1, address=....) .
Here is the Javascript code ( hello.js ):
var sendSamplePost = function () { // when the following line is commented, everything works, // if not, I get EXC_BAD_ACCESS (code=1, address=....) var xmlHttp = new XMLHttpRequest(); }; var sayHello = function (name) { return "Hello " + name + " from Javascript"; };
Here is the Objective-C code inside my ViewController :
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. JSContext *context = [[JSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]]; NSString *scriptPath = [[NSBundle mainBundle] pathForResource:@"hello" ofType:@"js"]; NSLog(@"scriptPath: %@", scriptPath); NSString *script = [NSString stringWithContentsOfFile:scriptPath encoding:NSUTF8StringEncoding error:nil]; NSLog(@"script: %@", script); [context evaluateScript:script]; JSValue *sayHelloFunction = context[@"sayHello"]; JSValue *returnedValue = [sayHelloFunction callWithArguments:@[@"iOS"]]; // this works! self.label.text = [returnedValue toString]; JSValue *sendSamplePostFunction = context[@"sendSamplePost"]; // this doesn't work :( [sendSamplePostFunction callWithArguments:@[]]; }
Could it be that the HTTP request function is not provided in the JavaScriptCore Framework? If so, can I overcome this using UIWebView -stringByEvaluatingJavaScriptFromString: :? What if I compiled and included another Javascript Engine (for example, V8) in my project?
source share