Программно заполнить данные в UIWebview - PullRequest
3 голосов
/ 06 марта 2011

В моем приложении я хочу, чтобы пользователь мог вводить свои данные для входа в систему в пользовательском представлении и затем отображать 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';"];

Ответы [ 2 ]

5 голосов
/ 06 марта 2011

Этот метод принимает JavaScript, выполняет его в контексте документа, а затем возвращает результат вам. Похоже, ваш JavaScript неверен. Попробуйте:

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

Если вы не уверены, что метод делает, перейдите к справочной библиотеке iOS , найдите ссылку на класс для используемого вами класса и прокрутите вниз до описание используемого вами метода .

3 голосов
/ 07 апреля 2011

Бил, я смог заставить мою работать с нижеследующим. По сути, элемент с идентификатором '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];
...