iphone forms uiwebview autofill

iphone - ¿Es posible que UIWebView guarde y autocomplete valores de formularios previamente ingresados(por ejemplo, nombre de usuario y contraseña)?



forms autofill (1)

Estoy construyendo una aplicación para iPhone que es solo una UIWebView 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, me piden que guarde mi nombre de usuario / contraseña, y luego se autocompleta cuando vuelvo al sitio más tarde.

Me gustaría habilitar la misma funcionalidad en UIWebView , pero por mi vida, no puedo encontrar la manera de hacerlo. ¿Algunas ideas?

Solución

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 impresionante paquete SFHFKeychainUtils Buzz Andersen para almacenar datos confidenciales en iOs Keychain.

Para que SFHFKeychainUtils funcione, debes hacer algunas cosas:

  1. Agregue SFHFKeychainUtils.h y SFHFKeychainUtils.m a su proyecto
  2. Agregue Security.framework a su proyecto
  3. #import <Security/Security.h> y #import "SFHFKeychainUtils.h"

Desde mi punto de vista, no creo que haya una manera fácil de hacerlo. Aquí hay una idea de lo que podría funcionar:

  • crea tu uiwebview
  • crear una solicitud nsurl
  • después de que su sitio web delegue los incendios de la función cargada en la página, busque en el cuerpo http de la solicitud
  • encuentre el formulario para iniciar sesión (¿regex para los formularios de inicio de sesión comunes?)
  • recuperar dar al usuario la opción de guardarlo y luego recuperarlo más tarde