javascript
  • objective-c
  • login
  • uiwebview
  • nsstring
  • 2011-03-05 52 views 2 likes 
    2

    在我的应用程序中,我希望能够让用户在自定义视图中输入其登录信息,然后显示UIWebView。我希望用户的用户名和密码以编程方式填写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';"]; 
    

    回答

    4

    该方法采用的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

    +0

    非常感谢。我应该使用什么方法? viewDidLoad,webViewDidFinishLoad? – Andrew 2011-03-06 02:24:12

    +0

    好吧,它需要页面完成加载才能访问它的内容,所以'webViewDidFinishLoad:'可能是放置它的适当位置。 – Jim 2011-03-06 02:34:05

    +0

    我试过了,它似乎没有工作。如果它在UIWebView中没有显示出来。我是否需要重新加载视图或其他内容? – Andrew 2011-03-06 03:39:37

    3

    Bil,我能够得到我的工作与下面。本质上,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]; 
    
    相关问题