Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 预填充WebView文本字段_Javascript_Ios_Objective C_Uiwebview - Fatal编程技术网

Javascript 预填充WebView文本字段

Javascript 预填充WebView文本字段,javascript,ios,objective-c,uiwebview,Javascript,Ios,Objective C,Uiwebview,我需要在UIWebView中预先填充文本字段,并了解javascript是实现这一点的最佳方法。不幸的是,我对javascript一无所知,在过去的几个小时里一直在摸索,一无所获 最新失败的尝试: - (void)webViewDidFinishLoad:(UIWebView *)webView { // username field id = username_5 & pw field id = password_5 NSString *javascript = @"\

我需要在
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>

… 
… 
… 
… 
… 
… 

您必须将javascript代码放入一个NSString中,然后使用
stringByEvaluatingJavaScriptFromString
执行。这是代码的样子:

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

通过在Firefox中突出显示元素ID并选择
inspect element
,我获得了元素ID。 结果表明,这为返回的ID提供了不同的ID:

NSString *body = [self.emailWebView stringByEvaluatingJavaScriptFromString:
                  @"document.getElementsByTagName('body')[0].outerHTML"];            
NSLog(@"%@", body);
将这些ID(根据用于导航到页面的内容而有所不同)插入:

解决了


感谢您的帮助。

使用此代码,这将起作用

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

我不确定这是否会有帮助,但你是否缺少
'testPW'
之后?我刚刚测试了您的代码(使用我在前面的评论中建议添加的
),您的JS代码对我来说运行良好。因此,如果HTML代码仍然不起作用,那么可能需要检查HTML代码。谢谢。我试试看。让我知道它是否对你有帮助。仍然没有乐趣。一位同事设法通过
C#
脚本预先填充字段,但同样的
javascript
无法从
Objective-C
工作。为了确保工作顺利进行,我从我的一个项目中复制了该脚本。问题一定在别的地方。检查您是否在javascript函数中传递了正确的“ID”,检查您的webView是否正确,是否设置了委托,等等。我已经编辑了OP以显示一些其他测试。在调用
js
之前,代理设置正确,元素ID正确,HTML已完全加载。它需要你的帮助。
view.loadUrl("javascript:(function() { "
    + " document.getElementById('login').value = '" + emailAdress+ "';"
    + " document.getElementById('login').readOnly='true'"
    + "})();");