通过iOS7中的JavaScriptCore进行HTTP请求

前端之家收集整理的这篇文章主要介绍了通过iOS7中的JavaScriptCore进行HTTP请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用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定义中的内容.

如果你想要AJAX,那么WebView就是你的选择.

猜你在找的iOS相关文章