Вопрос

Я использовал метод перехвата URL для передачи данных из JavaScript к объективам C путем передачи данных в качестве кодируемых URL -параметров и использования NSURLProtocol для перехвата запроса, однако я сейчас хочу отправить большие объемы данных, например, скажем, 10 000 символов, но это Не кажется практичным в запросе GET. Верно?

Есть ли способ для цели C перехватить данные, отправленные из UIWebView?
Если да, то я все еще использую nsurlprotocol и как мне получить данные о сообщении?
Если нет, есть ли другой способ передать большие объемы данных из UIWebView для цели C?

Это было полезно?

Решение

При использовании кода как:

@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"});

Другие советы

Любой запрос будет перехвачен делегатом, поэтому вы можете отправить любой запрос AJAX, наполните его параметрами и значениями, которые вы хотите, а затем отправить его. Все значения будут перехвачены, и вы можете использовать их так же, как и до сих пор. Легкий запрос на почту может быть отправлен с помощью jQuery, так же просто, как:

$ .post ("toobjc.html", {'data': "10k символов длинной строки и многое другое здесь ..."});

Подробнее здесь: http://api.jquery.com/jquery.post/

Вы обязательно должны использовать пост. Вам просто нужно настроить запрос на это. Возможно, вам придется убедиться, что данные закодированы, и позаботиться о паре других деталей.:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:myMimeType forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", requestData.length]       
         forHTTPHeaderField:@"Content-Length"];

[request setHTTPBody:requestData];

[self.playerView loadRequest: request];

В качестве альтернативы, вы можете отправить многочасовой документ или значения формы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top