この質問に対する完全な解決策を見つけました。(私はこれをChrome 27とFirefox 21でテストしました)。
知っておくべきことが2つあります。
- 「パスワードの保存」をトリガーし、
- 保存したユーザー名/パスワードを復元する
1.「パスワードの保存」をトリガーします。
以下のためのFirefox 21それが提出された入力テキストフィールドと入力されたパスワードフィールドを含むフォームがあることを検出したとき、「保存パスワードが」トリガされます。したがって、使用する必要があるのは
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
ajaxログインを実行し、サインインしたページにリロード/リダイレクトする一方でevent.preventDefault()
、フォームの送信により元のリダイレクトをブロックします。
Firefoxのみを扱う場合は、上記のソリューションで十分ですが、Chrome 27では機能しません。次に、Chrome 27で「パスワードの保存」をトリガーする方法を尋ねます。
以下のためにクロム27、「保存パスワードが」トリガされた後、それは入力テキストフィールドを含むフォーム提出することによってページにリダイレクトされた属性名=「ユーザ名」で、入力パスワードフィールド属性名=「パスワード」でを。したがって、フォームを送信するためにリダイレクトをブロックすることはできませんが、ajaxログインを行った後でリダイレクトを行うことはできます。(ページをリロードしない、またはページにリダイレクトしないようにajaxログインが必要な場合、残念ながら、私の解決策は機能しません。)次に、
<form id='loginForm' action='signedIn.xxx' method='post'>
<input type='text' name='username'>
<input type='password' name='password'>
<button id='loginButton' type='button'>Login</button>
</form>
<script>
$('#loginButton').click(someFunctionForLogin);
function someFunctionForLogin(){
if(/*ajax login success*/) {
$('#loginForm').submit();
}
else {
//do something to show login fail(e.g. display fail messages)
}
}
</script>
type = 'button'のボタンは、ボタンがクリックされたときにフォームが送信されないようにします。次に、ajaxログインのボタンに関数をバインドします。最後に、呼び出し$('#loginForm').submit();
はサインインしたページにリダイレクトします。サインインしたページが現在のページである場合、「signedIn.xxx」を現在のページに置き換えて「更新」できます。
これで、Chrome 27のメソッドがFirefox 21でも機能することがわかります。この方法を使用することをお勧めします。
2.保存したユーザー名/パスワードを復元します。
loginFormがすでにHTMLとしてハードコーディングされている場合は、loginFormに保存されたパスワードを復元しても問題はありません。
ただし、js / jqueryを使用してloginFormを動的に作成すると、保存されたユーザー名/パスワードはloginFormにバインドされません。保存されたユーザー名/パスワードはドキュメントが読み込まれるときにのみバインドされるためです。
したがって、loginFormをHTMLとしてハードコーディングし、js / jqueryを使用して動的にloginFormを移動/表示/非表示にする必要がありました。
備考:
ajaxログインを行う場合は、次のautocomplete='off'
ようなタグ形式で追加しないでください
<form id='loginForm' action='signedIn.xxx' autocomplete='off'>
autocomplete='off'
ユーザー名/パスワードの「オートコンプリート」を許可しないため、loginFormへのユーザー名/パスワードの復元が失敗します。