UIWeBViewが以前にフォーム値(例えば、ユーザー名とパスワード)を入力したAutofillを保存して保存して可能ですか?

StackOverflow https://stackoverflow.com/questions/4772341

質問

私はただの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を機能させるには、いくつかのことをする必要があります。

  1. 追加 SFHFKeychainUtils.hSFHFKeychainUtils.m あなたのプロジェクトに
  2. 追加します Security.framework あなたのプロジェクトに
  3. #import <Security/Security.h>#import "SFHFKeychainUtils.h"
役に立ちましたか?

解決

私の見た目から、私はそれをする簡単な方法がないと思います。これが何のアイデアです そうかもしれない しかし、作業:

  • uiwebviewを作成します
  • nsurlrequestを作成します
  • WebView Delegate Pageのロードされた機能火災の後、リクエストのHTTPボディを見てください
  • ログインのフォームを見つけます(一般的なログインフォームの正規表現?)
  • 検索ユーザーに保存するオプションを提供し、後で取得する
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top