我正在尝试使用iOS7新功能之一
JavaScriptCore Framework.我可以从Javascript成功输出一个helloWorld字符串,但我感兴趣的是,在Javascript中进行HTTP POST,然后将响应传递给Objective-C.不幸的是,当我在Javascript中创建XMLHttpRequest对象时,我得到了EXC_BAD_ACCESS(code = 1,address = ….).
这是Javascript代码(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"; };
这是我的ViewController中的Objective-C代码:
- (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:@[]]; }
可能是JavaScriptCore Framework中没有提供HTTP请求功能吗?如果是,我可以通过使用UIWebView的-stringByEvaluatingJavaScriptFromString来克服这个问题吗?如果我编译并在我的项目中包含另一个Javascript引擎(例如V8)怎么办?
解决方法
我的猜测是HTTP请求不是JavaScript Core的一部分,因为它实际上是浏览器的一部分,而不是JavaScript语言.
我认为JavaScript核心只包含ECMAScript定义中的内容.
我认为JavaScript核心只包含ECMAScript定义中的内容.
如果你想要AJAX,那么WebView就是你的选择.