При использовании кода типа:
@implementation AppProtocolHandler
+ (void)registerSpecialProtocol {
static BOOL inited = NO;
if (!inited) {
inited = YES;
[NSURLProtocol registerClass:[AppProtocolHandler class]];
}
}
- (void)handleRequest {
NSURLRequest *request = [self request];
// null when via app:// but works when via http://
NSLog(@"[request HTTPBody]: %@", [request HTTPBody]);
}
+ (BOOL)canInitWithRequest:(NSURLRequest *)request {
return YES;
}
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
return request;
}
@end
Запросы к некоторым протоколам (например, app://
) приведут к [request HTTPBody]
, равному null
. Но если вы отправите через http://
, то [request HTTPBody]
будет иметь данные запроса в NSData
объекте, как и ожидалось.
Так что ваш Javascript должен выглядеть примерно так:
$.post("http://test/hello/world", {'data':"foo bar"});
А не что-то вроде:
$.post("app://test/hello/world", {'data':"foo bar"});