Form tabanlı bir girişe sahip mevcut bir mobil sitenin yalnızca UIWebView
olan bir iPhone uygulaması yapıyorum. IPhone Safari'de mobil siteye giriş yaptığımda, kullanıcı adımı/şifremi kaydetmem istenir ve daha sonra siteye geri döndüğümde otomatik olarak doldurulur.Bir UIWebView'ın önceden girilmiş form değerlerini (ör. Kullanıcı adı ve şifre) kaydedip otomatik olarak doldurması mümkün mü?
Aynı işlevi UIWebView
'da etkinleştirmek istiyorum, ancak benim için, nasıl yapacağımı anlayamıyorum. Herhangi bir fikir? Michael'ın temel modeli (Kabul cevabı bakınız) takiben
Çözüm
, ben bu işi başardı. İşte ne yaptım: Ben iOs Keychain'e hassas veri depolamak için Buzz Andersen'in müthiş SFHFKeychainUtils paketini kullanıyorum VERİLERİ- (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];
}
}
}
Not BAŞLARKEN VERİ
- (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];
}
}
AYARI
. SFHFKeychainUtils amacıyla
çalışma almak için, bir kaç şey yapmak gerekir:
- projenize
SFHFKeychainUtils.h
veSFHFKeychainUtils.m
ekle - projenize
Security.framework
ekle #import <Security/Security.h>
ve#import "SFHFKeychainUtils.h"
Bu kod yalnızca yüklemeye çalıştığınız belirli bir web sitesi için mi çalışıyor? Uygulamam için bunu anlamaya çalışıyorum; ama benim sorunum biraz daha karmaşık çünkü uygulamasında şifreleri saklamak istediğim yaklaşık 5 farklı bağlantı var. Yukarıda yaptığınız şeyi denedim, ancak webView delegesi yönteminde aldığınız kullanıcı adını yazdırmak için hiçbir web sitesine sahip olamıyorum. Baska öneri? – RyanG
@ryan, formlarınızın her birinde ilk form gönderiminde verileri doğru bir şekilde sakladığınızı doğruladı mı? Ayrıca, geri alma sırasında form isimlerini iki kez kontrol edin ... bana bazı baş ağrıları neden oldu görmek zor bir misspelling vardı. – byron
Çözümünüzü gönderdiğiniz için çok teşekkürler (+1)! Document.getElementById ('kullanıcı adı'). '' Ve '@ 'document.getElementById (' password ') değerini kullanmam gerekiyordu. Bu yardımcı olur umarım! – Stunner