Kex*_*Kex 2 javascript objective-c socket.io javascriptcore ios7
我正在尝试使用iOS应用程序连接到Node.JS服务器,但我没有使用第三方本机库,而是尝试将其与JavaScript Socket.IO客户端连接并传递我所拥有的数据收到我的原生代码.我正在将Socket.IO模块加载到JSContext中并加载得很好,我可以在io对象中看到所有可用的对象/函数.
但是当它到达连接到我的Node.JS服务器的行时,我的JavaScript代码的执行停止了,我找不到原因.
如果我暂停应用程序,我没有看到任何其他线程打开连接.JavaScriptCore是否可能不支持Web套接字?
我的Objective-C代码:
JSContext *context = [JSContext new];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"socket.io" ofType:@"js"];
NSString *socketIO = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];;
filePath = [[NSBundle mainBundle] pathForResource:@"client" ofType:@"js"];
NSString *client = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
context[@"socket_url"] = @"http://192.168.1.128:8080";
context[@"log"] = ^(NSString *string){
NSLog(@"JavaScript:\n\t%@", string);
};
context[@"iOSBlock"] = ^(id deviceState) {
id JSON = [NSJSONSerialization JSONObjectWithData:deviceState options:NSJSONReadingMutableLeaves error:nil];
// I'll do something here if I get reach this part :)
};
[context evaluateScript:socketIO];
[context evaluateScript:client];
Run Code Online (Sandbox Code Playgroud)
我的JavaScript代码:
var socket = io.connect(socket_url);
socket.on('connect', function(){
log("Connected!");
});
socket.on('device-change', iOSBlock(deviceState));
Run Code Online (Sandbox Code Playgroud)
JavaScriptCore本身只实现ECMAScript规范.像XMLHTTPRequest,Web套接字,DOM等的东西来自WebKit.如果你绝对想要运行Socket.IO JavaScript客户端,你可以使用隐藏的UIWebView,虽然我建议使用Socket.IO-objc.
在一个不相关的注释中,您可以通过检查其异常属性或通过设置将错误打印到exceptionHandler属性的块来查看JSContext生成的错误:
context.exceptionHandler = ^(JSContext *context, JSValue *exception) {
NSLog(@"[%@:%@:%@] %@\n%@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], exception, [exception[@"stack"] toObject]);
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1102 次 |
| 最近记录: |