Заполнение формы и отправка в UIWebView - PullRequest
1 голос
/ 19 февраля 2012

Я хочу заполнить текстовое поле внутри UIWebView, поэтому для этого я использую следующий код:

NSString *inputipjavascript = [NSString stringWithFormat:@"document.getElementById('IP').value = '%@';", enterip];

NSString *result;
[webView stringByEvaluatingJavaScriptFromString:inputipjavascript];
result = [webView stringByEvaluatingJavaScriptFromString:@"$('#GD').click();"];

Страница, на которой есть форма, которую я хочу заполнить автоматически и отправить:

http://www.whatismyip.com/tools/ip-address-lookup.asp

Приведенный выше код не работает вообще, что мне нужно делать?

1 Ответ

7 голосов
/ 19 февраля 2012

Наиболее вероятное объяснение, основанное на ограниченных деталях контекста вашего кода, заключается в том, что вы игнорируете асинхронную природу метода loadRequest: и пытаетесь выполнить ваши команды javascript до загрузки DOM.Таким образом, выполняя ваши команды на пустом месте.UIWebView способ справиться с этим - использовать метод делегата -(void)webViewDidFinishLoad:(UIWebView *)webView;.

Редактировать: В «Я уже сделал это, но это не сработало».

После просмотра страницы по вашей ссылке: http://www.whatismyip.com/tools/ip-address-lookup.asp.Ваш JavaScript не совместим с элементами вашей целевой веб-страницы.Например, вот тег поля ввода IP.

<input type="text" name="IP" value="xxx.xxx.xxx.xxx">

И вы пытаетесь использовать getElementById('IP'), чтобы получить к нему доступ.У него нет элемента id, поэтому вы ничего не ссылаетесь.Наиболее точным спецификатором является элемент name, его значение равно IP.Первый метод, который пришел мне на ум, был getElementsByName(), тогда мне просто нужно использовать элемент [0].

. Для быстрого теста я бросил несколько строк в IBAction для теста, и они работали для меня:

- (IBAction)enterAndPress:(id)sender {
    NSString *enterip = @"74.125.227.50"; // take that google
    [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementsByName('IP')[0].value = '%@';",enterip]];
    [self.webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByName('GL')[0].click();"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...