【问题标题】:Programmatically fill in data in a UIWebview以编程方式在 UIWebview 中填充数据
【发布时间】:2011-03-05 23:14:17
【问题描述】:

在我的应用程序中,我希望能够让用户在自定义视图中输入他们的登录信息,然后显示 UIWebView。我希望 UIWebView 以编程方式填写用户的用户名和密码。然后 UIWebView 应该以编程方式单击登录按钮。我一直在尝试:

[webView stringByEvaluatingJavaScriptFromString:@"document.L_lbsc_txtUserName.text.value='ANdrew';"];

但它不起作用。我真的不明白 stringByEvaluatingJavaScriptFromString 的工作原理或它的设计目的。

我认为这可能与我在上面的字符串字段中填写的内容有关。 这是我要访问的网站的源代码:

<div class="lgntxt">
  <div style="padding-left:3px;">
    <input name="L$lbsc$txtUserName" type="text" value=" -username-" size="10" id="L_lbsc_txtUserName" tabindex="1" class="textbox" onfocus="if(this.value == ' -username-') this.value = ''; Hide('L_lbsc_txtPasswordHelp'); Show('L_lbsc_txtPassword');" onblur="if(this.value == '') this.value = ' -username-';" style="width:80px;"><br>
    <img src="/podium/images/spacer.gif" border="0" width="3" height="1"><br>
    <input name="L$lbsc$txtPasswordHelp" type="text" value=" -password-" size="10" id="L_lbsc_txtPasswordHelp" tabindex="1" class="textbox" onfocus="Hide('L_lbsc_txtPasswordHelp'); Show('L_lbsc_txtPassword'); document.getElementById('L_lbsc_txtPassword').focus();" style="width:80px;display:;">
    <input name="L$lbsc$txtPassword" type="password" size="10" id="L_lbsc_txtPassword" tabindex="2" class="textbox" onkeydown="if ((event.which ? event.which : event.keyCode) == 13) {return false;};" onkeyup="if ((event.which ? event.which : event.keyCode) == 13) {__doPostBack('L$lbsc$btnLogin','');return false;};" onblur="if(this.value == '') {Show('L_lbsc_txtPasswordHelp'); Hide('L_lbsc_txtPassword');}" style="width:80px;display:none;">
  </div>
</div>

我正在尝试替换用户名和密码字段。

任何帮助将不胜感激。 提前致谢。

编辑 所以我已经尝试了这些,但它们都不起作用:

[webView stringByEvaluatingJavaScriptFromString:@"document.myForm.myText.value='text from Obj-C';"];

[webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('L$lbsc$txtUserName').value='ANdrew';"];

【问题讨论】:

    标签: javascript objective-c login uiwebview nsstring


    【解决方案1】:

    该方法采用 JavaScript,在文档的上下文中执行它,然后将结果返回给您。看来您的 JavaScript 是错误的。试试:

    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('L$lbsc$txtUserName').value='ANdrew';"];
    

    如果您不确定某个方法的作用,请转到the iOS reference library,找到the class reference for the class you are using,然后向下滚动到the description of the method you are using

    【讨论】:

    • 非常感谢。我应该用什么方法输入这个? viewDidLoad, webViewDidFinishLoad?
    • 它需要页面完成加载才能访问其内容,所以webViewDidFinishLoad: 可能是放置它的合适位置。
    • 我试过了,它似乎不起作用。如果它正在工作,它不会显示在 UIWebView 中。我需要重新加载视图吗?
    • 没有。您是否收到任何错误,或者只是被忽略了?我要检查的事情:webView 变量是否包含UIWebView 的实例,还是为零?是否调用了委托方法?您是否在 Web 视图上设置了委托?你能运行其他 JavaScript 例如alert("test");吗?
    • 我正在使用 webview 委托。没有错误,只是没有响应。它似乎被忽略了。我确实将 webview 的委托设置为 self。我在 webViewDidFinishLoad: 中放了一个 NSLog,它被调用,只是没有响应。我尝试了警报,但仍然没有运气
    【解决方案2】:

    比尔,我能够让我的工作与以下。本质上,ID 为'logon-field' 的元素就是这样。我将 JavaScript 分成多行,以便可以插入我的变量(来自我的自定义屏幕中的 UITextField's 用户输入的值,位于我的 UIWebView 之上)并连接。我将下面的代码放在我的 textFieldShouldReturn: 视图控制器中的方法中,这样在用户在文本字段中输入完成之前它不会运行。

    NSString *logonJSStart = @"document.getElementById('logon-field').value='";
    
    NSString *logonWithValue = [logonJSStart stringByAppendingString:self.logon.text];
    
    NSString *logonJSFinal = [logonWithValue stringByAppendingString:@"';"]; 
    
    [webView stringByEvaluatingJavaScriptFromString:logonJSFinal];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      相关资源
      最近更新 更多