2013-08-09 15 views
5

Ho bisogno di precompilare i campi di testo in un UIWebView e mi viene dato capire che javascript è il modo migliore per fare questo. Sfortunatamente non so nulla di javascript e sto girovagando per le ultime ore, senza arrivare da nessuna parte.Campi di testo WebView precompilati

ultimo tentativo fallito:

- (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]; 
} 

Qualcuno mi può puntare nella giusta direzione?

operativa -Editazione-

Ho provato anche cercato di ritardare la chiamata nel caso la pagina non era a pieno carico e se chiamo qualcosa di simile:

- (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');"]]; 
} 

viene visualizzato l'allarme ma il campo con ID password_5 è non riempito.

I campi in questione sono nidificati in un modulo. Non so se questo faccia qualche differenza?

-edit 2-

Sono piuttosto sicuro che il problema è legato al codice HTML/nidificazione sul sito web di destinazione come ho appena provato questo su un altro sito e ha funzionato.

il sito di destinazione è nidificato in questo modo:

<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> 
+1

Im non sicuro se vi aiuterà, ma non sono u mancano ',' dopo il 'testPW'' '? –

+0

Sì, grazie - errore di battitura. – Robert

+1

Ho appena testato il tuo codice (con l'aggiunta di ';, ho suggerito nel commento precedente) e il tuo codice JS funziona bene per me. Quindi forse controlla il tuo codice HTML se è OK –

risposta

5

avevo ottenuto gli ID degli elementi evidenziandoli in Firefox e selezionando inspect element. Risulta questo dà diversi ID a quelli restituiti con:

NSString *body = [self.emailWebView stringByEvaluatingJavaScriptFromString: 
        @"document.getElementsByTagName('body')[0].outerHTML"];    
NSLog(@"%@", body); 

tamponamento questi ID (che a quanto pare variano dipende da quello che è stato utilizzato per accedere alla pagina) in:

[self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('username').value = '%@';", user]]; 
[self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('password').value = '%@';", pw]]; 
[self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('input_LoginPage-ipad_1').click();"]]; 

risolto.

Grazie per tutto il vostro aiuto.

+0

si prega di guardare questo http://stackoverflow.com/questions/37644551/auto-fill-forms-in-webview-by-javascript-android. ha bisogno del tuo aiuto. –

4

devi mettere il codice javascript all'interno di una NSString e quindi eseguire con stringByEvaluatingJavaScriptFromString. Questo è come il codice sarà simile:

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

Grazie. Darò una prova. – Robert

+0

Np. Fammi sapere se ti ha aiutato. –

+0

Ancora nessuna gioia. Un collega è riuscito a precompilare i campi tramite lo script 'C#' ma lo stesso 'javascript' non funziona da' Objective-C'. – Robert

1

utilizzare questo codice questo funzionerà

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