Наиболее вероятное объяснение, основанное на ограниченных деталях контекста вашего кода, заключается в том, что вы игнорируете асинхронную природу метода 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();"];
}