È ansible che UIWebView salvi e riempia automaticamente i valori del modulo precedentemente inseriti (ad esempio, nome utente e password)?

Sto creando un’applicazione per iPhone che è solo una UIWebView di un sito mobile esistente con un accesso basato su moduli. Quando accedo al sito mobile su iPhone Safari, mi viene richiesto di salvare il mio nome utente / password, che viene poi riempito automaticamente quando torno sul sito in un secondo momento.

Mi piacerebbe abilitare la stessa funzionalità in UIWebView , ma per la vita di me, non riesco a capire come farlo. Qualche idea?


Soluzione

Seguendo il modello base di Michael (vedi risposta accettata), sono stato in grado di farlo. Ecco cosa ho fatto:

IMPOSTAZIONE DEI DATI

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; { //save form data if(navigationType == UIWebViewNavigationTypeFormSubmitted) { //grab the data from the page NSString *username = [self.webView stringByEvaluatingJavaScriptFromString: @"document.myForm.username.value"]; NSString *password = [self.webView stringByEvaluatingJavaScriptFromString: @"document.myForm.password.value"]; //store values locally [[NSUserDefaults standardUserDefaults] setObject:username forKey:@"username"]; [SFHFKeychainUtils storeUsername:username andPassword:password forServiceName:@"MyService" updateExisting:YES error:nil]; } } 

OTTENIMENTO DEI DATI

 - (void)webViewDidFinishLoad:(UIWebView *)webView{ //verify view is on the login page of the site (simplified) NSURL *requestURL = [self.webView.request URL]; if ([requestURL.host isEqualToString:@"www.mydomain.com"]) { //check for stored login credentials NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:@"username"]; if (username.length != 0 ) { //create js strings NSString *loadUsernameJS = [NSString stringWithFormat:@"document.myForm.username.value ='%@'", username]; NSString *password = [SFHFKeychainUtils getPasswordForUsername: username andServiceName:@"MyService" error:nil]; if (password.length == 0 ) password = @""; NSString *loadPasswordJS = [NSString stringWithFormat:@"document.myForm.password.value ='%@'", password]; //autofill the form [self.webView stringByEvaluatingJavaScriptFromString: loadUsernameJS]; [self.webView stringByEvaluatingJavaScriptFromString: loadPasswordJS]; } } } 

Nota che sto usando il fantastico pacchetto SFHFKeychainUtils di Buzz Andersen per archiviare dati sensibili sul portachiavi di iOs.

Per far funzionare SFHFKeychainUtils, devi fare alcune cose:

  1. Aggiungi SFHFKeychainUtils.h e SFHFKeychainUtils.m al tuo progetto
  2. Aggiungi il Security.framework al tuo progetto
  3. #import e #import "SFHFKeychainUtils.h"

Dal mio aspetto non penso che ci sia un modo semplice per farlo. Ecco un’idea di cosa potrebbe funzionare:

  • crea il tuo uiwebview
  • creare un nsurlrequest
  • dopo che la funzione di caricamento della pagina caricata della pagina Web delegata è stata analizzata nel corpo http della richiesta
  • trova il modulo per il login (regex per i moduli di accesso comuni?)
  • recuperare consente all’utente di salvarlo e quindi recuperarlo in un secondo momento