预先填写WebView文本字段

我需要预先填写UIWebView文本字段,并给予理解, javascript是最好的方式去做这件事。 不幸的是,我对javascript一无所知,并且在过去的几个小时里一直在摸索,无处可去。

最新的拙劣尝试:

 - (void)webViewDidFinishLoad:(UIWebView *)webView { // username field id = username_5 & pw field id = password_5 NSString *javascript = @"\ var user = 'testUser';\ var pw = 'testPW';\ document.getElementById('username_5').value = user; \ document.getElementById('password_5').value = pw; \ ;"; // Execute JS [_emailWebView stringByEvaluatingJavaScriptFromString:javascript]; } 

任何人都可以指向正确的方向吗?

-编辑-

我也试过拖延电话,以防万一网页没有完全加载,如果我打电话像这样:

 - (void)webViewDidFinishLoad:(UIWebView *)wv { [NSObject cancelPreviousPerformRequestsWithTarget:self]; [self performSelector:@selector(injectJavascript) withObject:nil afterDelay:1.0]; } - (void)injectJavascript { [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('password_5').value = 'testPW';"]]; [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.alert('test');"]]; } 

出现警报,但是ID为password_5的字段未填写。

有问题的字段嵌套在表单中。 不知道这是否有什么区别?

-EDIT 2-

我很确定这个问题是相关的目标网站上的HTML /嵌套,因为我刚刚在另一个网站上尝试过,它的工作。

目标站点是这样嵌套的:

 <html> <head> … </head> <body onload="FinishLoad(1);hideJSWarn();"> <div id="noJSWarn" class="cssSecurityWarning" style="display: none;"> … </div> <table id="table_LoginPage_1" > … </table> <table id="table_LoginPage_2" > … </table> <blockquote> <form id="frmLogin_4" onsubmit="return Login(1)" autocomplete="off" method="POST" action="login.cgi" name="frmLogin"> <input id="tz_offset_5" type="hidden" name="tz_offset"></input> <table id="table_LoginPage_3" > <tbody> <tr> … <td valign="top"> <table id="table_LoginPage_6" > <tbody> <tr> <td> … </td> <td> <input id="username_5" type="text" size="20" name="username"></input> 

我已经通过在Firefox中突出显示元素ID并select了inspect element来获取元素ID。 原来,这给不同的ID给那些返回:

 NSString *body = [self.emailWebView stringByEvaluatingJavaScriptFromString: @"document.getElementsByTagName('body')[0].outerHTML"]; NSLog(@"%@", body); 

将这些ID(显然取决于用于导航到页面的变化)插入到:

 [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('username').value = '%@';", user]]; [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('password').value = '%@';", pw]]; [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('input_LoginPage-ipad_1').click();"]]; 

解决了它。

感谢所有的帮助人员。

你必须把javascript代码放在一个NSString中,然后用stringByEvaluatingJavaScriptFromString执行。 代码如下所示:

  [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('email').value = '%@'", email]]; [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('pass').value = '%@'", password]]; 

使用这个代码这将工作

 view.loadUrl("javascript:(function() { " + " document.getElementById('login').value = '" + emailAdress+ "';" + " document.getElementById('login').readOnly='true'" + "})();");