【发布时间】:2013-08-09 11:37:05
【问题描述】:
我需要在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 的字段未填写。
相关字段嵌套在表单中。不知道这样有没有区别?
-编辑 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>
【问题讨论】:
-
我不确定它是否会有所帮助,但你不是在
'testPW'之后错过了;吗? -
我刚刚测试了您的代码(添加了我在之前的评论中建议的
;)并且您的 JS 代码对我来说很好。因此,如果可以,请检查您的 HTML 代码 -
仍然无法正常工作,所以很可能是 HTML。
标签: javascript ios objective-c uiwebview