¿Es posible que UIWebView guarde y complete automáticamente los valores de formulario ingresados previamente (por ejemplo, nombre de usuario y contraseña)?
Estoy creando una aplicación para iPhone que es solo unaUIWebView
de un sitio móvil existente que tiene un inicio de sesión basado en formularios. Cuando inicio sesión en el sitio móvil en iPhone Safari, se me pide que guarde mi nombre de usuario / contraseña, y luego se completa automáticamente cuando vuelvo al sitio más tarde.
Me gustaría habilitar la misma funcionalidad enUIWebView
, pero por mi vida, no puedo entender cómo hacerlo. ¿Algunas ideas?
Siguiendo el modelo básico de Michael (ver respuesta aceptada), pude hacer esto. Esto es lo que hice:
CONFIGURACIÓN DE DATOS
- (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];
}
}
OBTENER DATOS
- (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];
}
}
}
Tenga en cuenta que estoy usando el increíble Buzz AndersenSFHFKeychainUtils paquete para almacenar datos confidenciales en el llavero iOs.
Para que SFHFKeychainUtils funcione, debe hacer algunas cosas:
AñadirSFHFKeychainUtils.h
ySFHFKeychainUtils.m
a su proyectoAñade elSecurity.framework
a su proyecto#import <Security/Security.h>
y#import "SFHFKeychainUtils.h"