5 Stimmen

IPhone SDK: Websites in UIWebView programmatisch steuern

Ich muss eine Website steuern, die in ein UIWebView geladen wird, um z.B. Post-Daten zu senden und GET-Anfragen zu verwenden. Nach jeder Anfrage sollte die Antwort als String in einer Variablen geladen werden.

Der Grund dafür ist, dass ich versuche, Daten von einer Website abzurufen, die keine öffentliche Web-API hat und eine benutzerbasierte Authentifizierung verwendet. Also möchte ich den Benutzer einloggen, einige Daten von dieser Seite abrufen und die Ergebnisse präsentieren.

Ist so etwas möglich?

EDIT: Ich bin gerade auf die Methode stringByEvaluatingJavaScriptFromString gestoßen. Wäre es möglich, diese Methode zu verwenden, um den Inhalt innerhalb des UIWebView mit JS zu steuern? Wie z.B. das Absenden eines Webformulars und das Warten auf das Laden der Seite und das Abrufen der Antwortdaten?

EDIT 2: Habe gerade ein Framework gefunden, das hilfreich sein könnte ASIHTTPRequest

2voto

Frank Krueger Punkte 67044

Natürlich ist es möglich. Schreiben Sie einfach den Netzwerkcode selbst und fügen Sie dann das resultierende HTML in die UIWebView ein.

// Führen Sie Ihren POST durch
NSURL *url = [NSURL URLWithString:"http://stackoverflow.com"];
NSString *body = @"laadeedaa";

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod: @"POST"];
[request setHTTPBody: [body dataUsingEncoding:NSUTF8StringEncoding]];

// Fügen Sie die Antwort in die UIWebView ein
[webView loadRequest:request];

Wenn Sie die Antwort vor dem Anzeigen verarbeiten möchten, sollten Sie etwas Ähnliches wie folgt tun:

NSURLResponse *response = nil;
NSError *error = nil;
NSData *respData = [NSURLConnection sendSynchronousRequest:request 
                                         returningResponse:&response 
                                                     error:&error];
NSString *respString = [[[NSString alloc] initWithData:respData 
                                              encoding:NSUTF8StringEncoding] autorelease];

NSString *htmlString = [self doSomethingWith:respString];

[webView loadHTMLString:htmlString baseURL:@"http://stackoverflow.com"];

Denken Sie auch daran, dass Sie JavaScript verwenden können, um den Browser zu steuern:

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X