[解決済み] ブラウザでパスワードの保存を促すにはどうしたらいいですか?
質問
私は、次のようなログインダイアログを持つWebアプリケーションに取り組んでいます。
- ユーザーがquot;login"をクリックします。
- ログインフォームのHTMLがAJAXで読み込まれ、ページ上のDIVに表示される
-
ユーザーはフィールドにユーザー/パスを入力し、送信をクリックします。これは
<form>
-- ユーザー名とパスワードはAJAXで送信されます。 - ユーザー/パスワードが問題なければ、ユーザーがログインした状態でページを再読み込みします。
- ユーザー/パスワードが正しくない場合、ページはリロードされませんが、エラーメッセージがDIVに表示され、ユーザーは再試行することになります。
ここで問題なのは、ブラウザが通常の "このパスワードを保存しますか?Yes / Never / Not Now"という、他のサイトでは表示されるプロンプトが表示されないのです。
をラップしてみました。
<div>
で
<form>
タグに "autocomplete='on'" を入れても、違いはありませんでした。
ログインフローを大幅に変更せずに、ブラウザにパスワードを保存するようにさせることは可能でしょうか?
感謝 エリック
p.s. 私の質問を補足すると、私は間違いなくパスワードを保存するブラウザで作業していますし、"Never for this site"をクリックしたことはありません。これは、ログインフォームであることを検出しないブラウザの技術的問題で、オペレータエラーではありません :-)。
解決するには?
この質問に対する完全な解決策を見つけました。(Chrome27とFirefox21でテストしました)。
知っておくべきことは2つあります。
- パスワードの保存」をトリガーし
- 保存されたユーザー名/パスワードのリストア
1. トリガー「パスワードの保存
について Firefox 21 パスワードの保存」は、入力テキストフィールドを含むフォームがあり、入力パスワードフィールドが送信されたことを検出したときにトリガーされます。そこで
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
は、ajaxによるログインとサインインページへのリロード/リダイレクトを行い、その間に
event.preventDefault()
は、フォームを送信したことによる本来のリダイレクトをブロックします。
Firefoxのみであれば、上記の対処法で十分ですが、Chrome 27ではうまくいきません。そこで、Chrome 27で「パスワードの保存」を起動する方法をお聞きします。
について Chrome 27 パスワードの保存」が発生する 後 というテキストフィールドを含むフォームを送信することで、そのページにリダイレクトされます。 属性name='username'を持つ とパスワード入力欄 属性名='password' . したがって、フォームを送信したことによるリダイレクトをブロックすることはできませんが、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. 保存したユーザー名/パスワードを復元する。
もし、既にログインフォームがHTMLとしてハードコーディングされているなら、ログインフォームに保存されたパスワードを復元することは問題ないでしょう。
しかし、js/jqueryを使用してloginFormを動的に作成した場合、保存されたユーザ名/パスワードはドキュメントを読み込むときにのみバインドされるため、loginFormにバインドされることはありません。
そのため、ログインフォームをHTMLとしてハードコーディングし、js/jqueryを使用して動的に移動/表示/非表示を行う必要がありました。
備考
ajaxログインを行う場合、以下のように
autocomplete='off'
のようなタグ形式で
<form id='loginForm' action='signedIn.xxx' autocomplete='off'>
autocomplete='off'
は、ユーザー名/パスワードのオートコンプリートを許可していないため、ログインフォームへのユーザー名/パスワードのリストアが失敗します。
関連
-
[解決済み] check_ajax_referer() は実際どのように動作するのでしょうか?
-
ajax リクエストが Uncaught TypeError を報告しました。不正な呼び出しエラー
-
AJAXクロスドメイン問題(3つの解決策)
-
[解決済み] Webフォームのフィールド/入力タグでブラウザのオートコンプリートを無効にするにはどうすればよいですか?
-
[解決済み] Firefox または Chrome ブラウザから HTTP POST リクエストを手動で送信する方法
-
[解決済み] どうすればjQueryに非同期ではなく、同期のAjaxリクエストを実行させることができますか?
-
[解決済み] DOM要素が現在のビューポートで表示されているかどうかを確認するにはどうすればよいですか?
-
[解決済み] jQuery AJAX送信フォーム
-
[解決済み] ブラウザの「パスワードの保存」機能を無効にする
-
[解決済み] HTTPリクエストがステータスコード0を返すのはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Google Maps APIがAJAX使用時のみ「Uncaught ReferenceError: google is not defined」を投げる。
-
[解決済み] AJAX使用時にGoogle Maps APIが "Uncaught ReferenceError: google is not defined "を投げる。
-
ajax リクエストが Uncaught TypeError を報告しました。不正な呼び出しエラー
-
Uncaught SyntaxError: 位置 0 で JSON の予期しないトークンです。
-
jS Ajaxアップロードファイルのエラー "Uncaught TypeError: 不正な呼び出し"
-
[解決済み] ブラウザの「パスワードの保存」機能を無効にする
-
[解決済み] FirefoxでjQuery $.ajax(), $.post がREQUEST_METHODとして "OPTIONS "を送信する問題
-
[解決済み】HTMLフォームのaction属性に空のURLを使用するのは良い方法ですか?(action="")
-
[解決済み] XHRリクエストの応答としてリダイレクトを返す
-
[解決済み] Google インスタントはどのように機能するのですか?