填写表单并在UIWebView中提交

时间:2012-02-18 21:48:31

标签: javascript iphone objective-c forms uiwebview

我想在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 个答案:

答案 0 :(得分:7)

基于代码上下文的有限细节的最可能的解释是,您忽略了loadRequest:方法的异步性质,并尝试在加载DOM之前执行javascript命令。因此无需执行任何命令。处理此问题的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();"];
}