34
我正在構建一個iPhone應用程序,該應用程序僅具有基於表單登錄的現有移動網站的UIWebView
。當我在iPhone Safari上登錄移動網站時,系統會提示我保存用戶名/密碼,然後在稍後返回網站時自動填充。UIWebView可以保存和自動填寫以前輸入的表單值(例如,用戶名和密碼)嗎?
我想在UIWebView
中啓用相同的功能,但對於我的生活,我無法弄清楚如何去做。有任何想法嗎?
解決方案
繼邁克爾的基本模型(見接受的答案),我能得到這個工作。下面是我所做的:
SETTING DATA
- (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"
此代碼僅適用於您嘗試加載的特定網站嗎?我一直在試圖弄清楚我的應用,以及;但我的問題有點複雜,因爲我的應用程序中有大約5個不同的鏈接,我希望它們可以保存密碼。我嘗試了上面的操作,但是我無法通過任何網站打印出您在webView委託方法中收到的用戶名。有什麼建議麼? – RyanG 2011-05-18 13:12:40
@ryan,你是否證實你實際上正確地將數據存儲在每個表單上的初始表單上?此外,仔細檢查檢索表單名稱...我有一個難以察覺的拼寫錯誤,導致我一些頭痛。 – byron 2011-05-23 00:17:01