что если мне нужно это для каждой веб-страницы, которую посещает пользователь? Могу ли я показать предложение в соответствии с ранее введенным значением? например, если пользователь заходит в gmail и вводит какой-либо электронный идентификатор, в следующий раз, когда он снова посетит страницу gmail, как я могу показать ему ранее введенный электронный идентификатор в качестве предложения? @byron
даю приложение для iPhone, которое простоUIWebView
существующего мобильного сайта, который имеет форму входа в систему. Когда я захожу на мобильный сайт с iPhone Safari, мне предлагается сохранить имя пользователя и пароль, и он автоматически заполняется, когда я возвращаюсь на сайт позже.
Я хотел бы включить ту же функциональность вUIWebView
Но я не могу понять, как это сделать. Есть идеи?
Следуя базовой модели Майкла (см. Принятый ответ), я смог это сделать. Вот что я сделал:
НАСТРОЙКА ДАННЫХ
- (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];
}
}
ПОЛУЧЕНИЕ ДАННЫХ
- (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];
}
}
}
Обратите внимание, что я использую удивительный Базз АндерсенSFHFKeychainUtils пакет для хранения конфиденциальных данных в связке ключей iOs.
Чтобы заставить SFHFKeychainUtils работать, вам нужно сделать несколько вещей:
ДобавлятьSFHFKeychainUtils.h
а такжеSFHFKeychainUtils.m
к вашему проектуДобавитьSecurity.framework
к вашему проекту#import <Security/Security.h>
а также#import "SFHFKeychainUtils.h"