2012-02-18 88 views
1

我想在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

上面的代碼不會在所有的工作,我需要什麼做?

回答

7

基於代碼上下文的有限細節,最可能的解釋是您忽略了loadRequest:方法的異步性質,並試圖在DOM加載之前執行您的javascript命令。因此在沒有任何事情的情況下執處理此問題的方法是使用-(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();"]; 
} 
+0

我這樣做了,但沒有奏效... – 2012-02-19 09:06:09

+0

編輯答案.. – NJones 2012-02-20 00:11:38

相關問題