Frage

Ich habe schon die URL Intercept-Methode unter Verwendung von Daten von Javascript Ziel C passieren, indem die Daten als URL-codierten Parameter übergeben und mit NSURLProtocol der Anforderung abfangen aber ich jetzt größere Datenmengen wie etwa 10.000 Zeichen lang senden bin zu wollen Strings, aber dies scheint nicht praktisch in einer GET-Anfrage zu tun. Richtig?

Gibt es eine Möglichkeit für Objective-C zu Intercept POST gesendeten Daten von einem UIWebView?
Wenn dies der Fall verwende ich noch NSURLProtocol und wie erhalte ich die POST-Daten?
Wenn nicht, ist es eine andere Art und Weise ich größere Mengen an Daten aus dem UIWebView objektiven c passieren kann?

War es hilfreich?

Lösung

Bei der Verwendung von Code wie:

@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

Anfragen an einigen Protokollen (z app://) wird in [request HTTPBody] sein null führen. Aber wenn Sie durch http:// senden dann die [request HTTPBody] werden die Anforderungsdaten in einem NSData Objekt haben, wie erwartet.

Also Ihr Javascript sollte in etwa so aussehen:

$.post("http://test/hello/world", {'data':"foo bar"});

und nicht so etwas wie:

$.post("app://test/hello/world", {'data':"foo bar"});

Andere Tipps

Jeder möglicher Antrag des Delegierten abgefangen werden, so dass Sie jede POST Ajax-Anfrage schicken, stopfen sie mit den Parametern und Werten, die Sie wollen und es dann versenden. Alle Werte werden abgefangen und Sie können sie auf die gleiche Weise verwenden Sie bisher tun. Eine einfache POST-Anfrage JQuery gesendet werden kann, verwenden, so einfach wie:

.

$ post ( "toobjc.html", { 'data': "10k Zeichen lange Zeichenfolge und mehr hier ..."});

Mehr hier: http://api.jquery.com/jQuery.post/

Sie sollten auf jeden Fall einen POST verwenden. Sie müssen nur die Anforderung für sie einzurichten. Sie können sicherstellen müssen, dass die Daten codiert und kümmern uns um ein paar andere Details.

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];

Alternativ können Sie auch ein mehrteiliges Dokument oder Formularwerte senden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top