É possível que um UIWebView salve e preencha automaticamente valores de formulário inseridos anteriormente (por exemplo, nome de usuário e senha)?

Estou construindo um aplicativo para iPhone que é apenas umUIWebView de um site móvel existente que possui um logon baseado em formulário. Quando eu faço login no site móvel no iPhone Safari, sou solicitado a salvar meu nome de usuário / senha, e ele é preenchido automaticamente quando eu voltar ao site mais tarde.

Gostaria de ativar a mesma funcionalidade noUIWebView, mas para a minha vida, não consigo descobrir como fazê-lo. Alguma ideia?

Solução

Seguindo o modelo básico de Michael (veja a resposta aceita), consegui fazer isso. Aqui está o que eu fiz:

CONFIGURAÇÃO DE DADOS

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

    }    

}

OBTENDO DADOS

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

        }
    }   
}

Note que eu estou usando as incríveis imagens de Buzz AndersenSFHFKeychainUtils pacote para armazenar dados confidenciais no iOs Keychain.

Para que o SFHFKeychainUtils funcione, você precisa fazer algumas coisas:

Adicionar, acrescentarSFHFKeychainUtils.h eSFHFKeychainUtils.m para o seu projetoAdicione oSecurity.framework para o seu projeto#import <Security/Security.h> e#import "SFHFKeychainUtils.h"

questionAnswers(1)

yourAnswerToTheQuestion