どのようにWebフォームのフィールド/入力タグでブラウザのオートコンプリートを無効にするには? (6/6)

html forms browser autocomplete




Answer 26 Ben


この問題が報告されてからこれほど長い間、まだ問題になっているとは信じられません。上記の解決策では、要素が表示されていないか画面外にあるかをsafariが知っているように見えたので、私には効果がありませんでした。

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

誰かの役に立つといいな!




Answer 27 Stav Bodik


だから、ここにある。

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">




Answer 28 Simmoniz


これは、今ではブラウザが無視しているセキュリティ上の問題です。ブラウザは、開発者がその情報が機密情報であり、保存すべきではないと考えていても、入力名を使ってコンテンツを識別し、保存します。2つのリクエストの間で入力名を異なるものにすることで問題が解決します(ただし、ブラウザのキャッシュに保存され、ブラウザのキャッシュも増加します)。ブラウザの設定でオプションを有効にするか無効にするかをユーザに尋ねるのは良い解決策ではありません。この問題はバックエンドで修正することができます。

これが私の修正点です。私のフレームワークに実装したアプローチ。すべてのオートコンプリート要素は、次のような隠し入力で生成されます。

<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<? echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

サーバはこのようにポスト変数を処理します。

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

値は通常通りにアクセスすることができます。

var_dump($_POST['username']);

また、ブラウザは前回のリクエストや前のユーザーからの情報を提案することができなくなります。

すべてが魅力のように動作します、たとえブラウザが更新された場合でも、オートコンプリートを無視するかどうかをしたい。それは私のための問題を解決するための最良の方法となっています。




Answer 29 Jakob Løkke Madsen


ここで述べたハックはどれも私にとってChromeでは機能しませんでした。ここで問題の議論があります:https : //code.google.com/p/chromium/issues/detail?id=468153#c41

これを <form> 内に追加すると機能します(少なくとも現時点では)。

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>



Answer 30 xxxxx


入力で使用することができます。

例えば

<input type=text name="test" autocomplete="off" />