[[jQueryめも]] ドメインごとに入力したIDとパスワードをブラウザが記憶して、次回から自動的に補完してくれるautocomplete機能があります。~ これが気に入らないとクライアントから言われてautocompleteを無効化する方法を検討しました。~ IDが候補でリスト表示されるのも気に入りません。 *autocompleteをoffにする [#va0c2686] form自体に設定 <form method="post" action="/" autocomplete="off"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit"> </form> passwordフィールドに設定 <form method="post" action="/"> <input type="text" name="username"> <input type="password" name="password" autocomplete="off"> <input type="submit"> </form> 言うことを聞いてくれません。~ 特にChromeは頑なです。 *そもそもどうしてそんなに補完したがるのか [#k5ba3864] 参考 [[フォームのオートコンプリートを無効にするには:https://developer.mozilla.org/ja/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion]] > マスターパスワードが用いられない場合でも、ブラウザのパスワード管理機能は純粋にセキュリティの向上につながります。 > パスワードをブラウザが保存すればユーザは覚えなくてもよいため、覚えなければならない場合よりも強固なパスワードをユーザが設定できるようになります。 > > このような理由から、モダンブラウザの多くはログインフィールドにおける autocomplete="off" をサポートしていません。 という理由だそうです。 *任意の文字列を代入する [#x1d75420] 参考サイトにあった方法を試してみます。 <form method="post" action="/" autocomplete="nope"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit"> </form> ダメじゃん。 *nameを変えてみる [#h3cf62b3] 関係ないnameに変更したらどうなるのか。 <form method="post" action="/" autocomplete="off"> <input type="text" name="aaaaa"> <input type="password" name="bbbbb"> <input type="submit"> </form> ダメだ。 *どうやってフィールドを判定しているのか [#ae3190e4] 試しにtypeをpasswordからtextへ変更してみた。 <form method="post" action="/" autocomplete="nope"> <input type="text" name="username"> <input type="text" name="password"> <input type="submit"> </form> 補完されない⌣ typeがpasswordのフィールドをパスワード項目とし、その直近の上のフィールドをID項目と判定しているっぽい。 *forcusinでtypeをtextからpasswordへ変更 [#ta3ec6c4] HTML描画直後はパスワードフィールドはtypeをtextで表示。~ パスワードフィールドへのforcusinでtypeをpasswordへ変更すればいんじゃね?~ てかそこまでやる必要あるのか? jQueryではtypeは変更できなさそうなので、以下で対応。 <form method="post" action="/" autocomplete="nope"> <input type="text" name="username"> <input type="text" name="password" id="password"> <input type="submit"> </form> <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> <script> $(function(){ $('#password').focusin(function(){ document.getElementById('password').type = 'password'; }); }); </script> **問題点 [#v0e98d3e] IDを入力せずにパスワードフィールドに先にforcusinされると補完されちゃう。~ 自身が今までそんなことをした経験が無いので良しとする。