フォームベースのログインを持つ既存のモバイルサイトのちょうどUIWebView
であるiPhoneアプリを構築しています。 iPhone Safariでモバイルサイトにログインすると、ユーザー名とパスワードを保存するように求められ、後でサイトに戻ったときに自動的に入力されます。UIWebViewは以前に入力したフォームの値(例:ユーザー名とパスワード)を保存して自動入力することはできますか?
私はUIWebView
でも同じ機能を有効にしたいと思いますが、私の人生では、どうやってそれを行うのか分かりません。何か案は?マイケルの基本モデル(受け入れ答えを参照)に続き
ソリューション
は、私がこれを成し遂げることができました。ここに私がやったことだ:私はiOSのキーチェーンに機密データを保存するためにバズアンデルセンの素晴らしい SFHFKeychainUtilsパッケージを使用しているデータ- (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];
}
}
}
注意を取得し、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];
}
}
SETTING
。
作業SFHFKeychainUtilsを得るために、あなたはいくつかのことを行う必要があります。
- は
- プロジェクトに
SFHFKeychainUtils.h
とSFHFKeychainUtils.m
を追加し、プロジェクトに #import <Security/Security.h>
と#import "SFHFKeychainUtils.h"
Security.framework
を追加
このコードは、ロードしようとしている特定のWebサイトでのみ機能しますか?私は私のアプリのためにこれを理解しようとしています。私の問題はもう少し複雑です。なぜなら、パスワードを保存したいアプリケーションのリンクが5つほどあるからです。上記の作業を試みましたが、WebViewデリゲートメソッドで受け取ったユーザー名を表示するWebサイトを取得できません。助言がありますか? – RyanG
@ryan、それぞれのフォームの最初のフォームに実際にデータを正しく格納していることを確認しましたか?また、検索時にフォーム名をダブルチェックしてみてください...私には頭がおかしくなってスペルミスがありました。 – byron
あなたのソリューション(+1)を投稿してくれてありがとう! document.getElementById( 'username')。value "と' @ "document.getElementById( 'password')。value" 'を使用して動作させる必要がありました。お役に立てれば! – Stunner