UIWeBViewが以前にフォーム値(例えば、ユーザー名とパスワード)を入力したAutofillを保存して保存して可能ですか?
質問
私はただの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"
解決
私の見た目から、私はそれをする簡単な方法がないと思います。これが何のアイデアです そうかもしれない しかし、作業:
- uiwebviewを作成します
- nsurlrequestを作成します
- WebView Delegate Pageのロードされた機能火災の後、リクエストのHTTPボディを見てください
- ログインのフォームを見つけます(一般的なログインフォームの正規表現?)
- 検索ユーザーに保存するオプションを提供し、後で取得する
所属していません StackOverflow