jQueryめも

ドメインごとに入力したIDとパスワードをブラウザが記憶して、次回から自動的に補完してくれるautocomplete機能があります。
これが気に入らないとクライアントから言われてautocompleteを無効化する方法を検討しました。
IDが候補でリスト表示されるのも気に入りません。

autocompleteをoffにする

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は頑なです。

そもそもどうしてそんなに補完したがるのか

参考 フォームのオートコンプリートを無効にするには

マスターパスワードが用いられない場合でも、ブラウザのパスワード管理機能は純粋にセキュリティの向上につながります。

パスワードをブラウザが保存すればユーザは覚えなくてもよいため、覚えなければならない場合よりも強固なパスワードをユーザが設定できるようになります。

このような理由から、モダンブラウザの多くはログインフィールドにおける autocomplete="off" をサポートしていません。

という理由だそうです。

任意の文字列を代入する

参考サイトにあった方法を試してみます。

<form method="post" action="/" autocomplete="nope">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
</form>

ダメじゃん。

nameを変えてみる

関係ないnameに変更したらどうなるのか。

<form method="post" action="/" autocomplete="off">
<input type="text" name="aaaaa">
<input type="password" name="bbbbb">
<input type="submit">
</form>

ダメだ。

どうやってフィールドを判定しているのか

試しにtypeをpasswordからtextへ変更してみた。

<form method="post" action="/" autocomplete="nope">
<input type="text" name="username">
<input type="text" name="password">
<input type="submit">
</form>

補完されない [smile]

typeがpasswordのフィールドをパスワード項目とし、その直近の上のフィールドをID項目と判定しているっぽい。

forcusinでtypeをtextからpasswordへ変更

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>

問題点

IDを入力せずにパスワードフィールドに先にforcusinされると補完されちゃう。
自身が今までそんなことをした経験が無いので良しとする。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-19 (日) 19:09:32