UIWebView отображает пустую страницу при отправке формы

Я новичок в iOS (профессионал.NET), так что это может быть простой проблемой, но я не смог ничего найти с помощью поиска SO или Google (и, возможно, не ищу правильные термины).

Я пишу приложение, которое отображает информацию с маршрутизатора DD-WRT через его веб-интерфейс. У меня нет проблем с отображением начальной страницы и перемещением по любой другой странице, но если я внесу какие-либо изменения в форму (и она перенаправит на apply.cgi или applyuser.cgi), UIWebView будет пустым - он должен отображать та же страница, с изменениями формы представления. Сайт отлично работает в Mobile Safari, что я нахожу интригующим, но я думаю, что UIWebView не совсем то же самое.

Я думаю, что код iOS довольно стандартный для отображения веб-страницы, но я перечислю его ниже. Я не могу дать вам доступ к моему маршрутизатору, потому что, ну, это не очень хорошая идея:) Надеюсь, кто-то с маршрутизатором DD-WRT может помочь (или в любом случае знать, в чем моя проблема).

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *sURL = @"http://user:pass@XXX.XXX.X.X";
    NSURL *url = [NSURL URLWithString:sURL];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [self.webView loadRequest:request];

    self.webView.delegate = self ;

}

И я делаю несколько вещей с Javascript в webViewDidFinishLoad метод, но я знаю, что это не преступник, потому что это все еще происходит, когда я закомментирую это.

1 ответ

Решение

Ну, я решил проблему самостоятельно. Я думаю, что частью этого было добавление имени пользователя и пароля в URL (что было только временной мерой), потому что я обнаружил, что этот метод обеспечивает те же результаты в мобильных Safari и настольных Chrome. Поэтому я добавил MKNetworkKit в свой проект, который предоставил простой способ добавить аутентификацию к моему запросу, и обнаружил, что мне нужно было сделать специальный запрос для отправки данных, а затем перезагрузил страницу, чтобы увидеть изменения.

в (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType метод, я проверяю, если ([request.HTTPMethod isEqualToString:@"POST"]) и сделать это:

NSString *sPostData = [[NSString alloc] initWithData:request.HTTPBody encoding:NSUTF8StringEncoding];

NSArray *aPostData = [sPostData componentsSeparatedByString:@"&"];

NSMutableDictionary *dPostData = [[NSMutableDictionary alloc] init];

//i don't know if this is the best way to set a dictionary, but it works
for (id apd in aPostData)
{
    NSString *key = [apd componentsSeparatedByString:@"="][0];
    NSString *val = [apd componentsSeparatedByString:@"="][1];
    [dPostData setValue:val forKey:key];
}

MKNetworkEngine *engine = [[MKNetworkEngine alloc] init];

MKNetworkOperation *op = [engine operationWithURLString:[request.URL description] params:dPostData httpMethod:@"POST"];

[op setUsername:@"myUserName" password:@"myPassword" basicAuth:YES];

self.postedRequest = TRUE; //a bool I set so, when it comes to webViewDidFinishLoad, I reload the current page

[op start]; //send POST operation
Другие вопросы по тегам