iPhone SDK: управляйте сайтами в UIWebView программно - PullRequest
5 голосов
/ 14 января 2010

Мне нужно управлять веб-сайтом, который загружается в UIWebView, как отправка данных поста и использование запросов на получение. После каждого запроса ответ должен быть загружен в виде строки в переменную.

Причина этого в том, что я пытаюсь получить данные с веб-сайта, на котором нет общедоступного веб-API, и использую аутентификацию пользователя на основе файлов cookie. Поэтому я хочу войти в систему пользователя, получить некоторые данные с этого сайта и представить результаты.

Возможно ли что-то подобное?

РЕДАКТИРОВАТЬ: Я только что столкнулся с методом stringByEvaluatingJavaScriptFromString . Можно ли использовать этот метод для управления контентом в UIWebView с помощью JS? Как отправка веб-формы и ожидание окончания загрузки страницы и получения данных ответа?

РЕДАКТИРОВАТЬ 2 : только что нашел полезную платформу ASIHTTPRequest

1 Ответ

2 голосов
/ 14 января 2010

Конечно, это возможно. Просто создайте сетевой код самостоятельно, а затем выведите полученный HTML-код в UIWebView.

// Do your POST
NSURL *url = [NSURL URLWithString:"http://stackoverflow.com"];
NSString *body = @"laadeedaa";

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

// Dump the response to the UIWebView
[webView loadRequest:request];

Если вы хотите обработать ответ перед его отображением, то вы захотите сделать что-то вроде:

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

Также имейте в виду, что вы можете использовать JavaScript для управления браузером:

- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...