Stackoverflowについても同様の質問が1つあることは知っていますが、そこでは解決策はありませんでした。
<form autocomplete="off" id="search_form" method="post" action="">
<input autocomplete="off" type="text" />
</form>
ご覧のとおり、フォームと入力フィールドの両方にautocomplete=off
を配置しましたが、Google Chromeはこのオートコンプリートリストを表示します。これはFirefoxやサファリ。
Formタグにautocomplete=off
を置く以外のソリューションはありますか??
これは、Chrome(ほぼすべてのChrome userwantsこの動作)。
この理由は、Googleが呼んでいるものです 選挙区の優先順位 :
回避策はありますが、将来的には修正される可能性が高いですChrome開発者はChromeバグとして。
回避策は機能しますが、ユーザーの混乱を招く動作を作成します-ユーザーは設定に従ってオートフィルが機能することを期待しています。
多くのユーザーは、ページ内のautocomplete = offを削除するだけのプラグインまたはスクリプトを使用して、アプリのオートコンプリート設定を無視することを既に選択しています。
オートコンプリートが機能することを前提に設計し、それを考慮してください。
個人的には、サイトが自分のパスワードを思い出せず、ブラウザ拡張機能を使用するパスワードを上書きしない場合、それは嫌いです。しかし、私は自分の仕事用のアプリケーションも作成しますが、ユーザーがマシンのロックを解除したままにしておく可能性があるため、パスワードのリコールはセキュリティリスクと見なされます。私個人の意見では、ユーザーがマシンをロックしないことはアプリケーションではなくローカルITの問題であり、ユーザーが信頼できない場合、ローカルITはすべてのWebアプリケーションのすべてのパスワードオートコンプリートを無効にできます。
残念ながら、セキュリティチェックに合格するには、一部のアプリケーションはまだオートコンプリートを無効にする必要があります。それを行う方法はありますが、それらはすべて恐ろしいものです。最初のハックは、パスワード入力を完全に新しいものにすることです。
<input type="hidden" name="password" id="realPassword" />
<input type="password" name="{randomly generated}"
onchange="document.getElementById('realPassword').value = this.value" />
単純化するためにすべてをインライン化しましたが、これによりハックのアイデアが得られるはずです。プラグインやブラウザは、まったく新しい名前で入力を自動入力できません。
ARIAとラベルを適切に構築すると、このソリューションは機能しなくなります(ブラウザー/拡張機能がラベルからの入力を見つけて自動入力できるようにするため)。
したがって、オプション2も恐ろしいことですが、オートコンプリートが実行されるまで待ってから、フィールドを空白にすることです。
<input type="text" name="username"
onchange="window.setTimeout(function() {
document.getElementById('password').value = '';
}, 100)" />
<input type="password" id="password" />
私が言ったように、厄介です。
これはGoogle Chromeのバグである可能性があり、隠し入力を作成して不正行為を行うことはできません。オートコンプリート機能は、データを入力する最初の入力テキストを取得します。
<form autocomplete="off" id="search_form" method="post" action="">
<input type="text" style="display:none" />
<input autocomplete="off" type="text" />
</form>
これは、Google Chromeで再発する問題のようです。ただし、フォームにオートコンプリートを追加するとdidが機能します。たぶん新しいバージョンではそうではありません。
これはハックです。 入力にIDを与えます。たとえば、foo
で、JavaScriptで:
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) {
setTimeout(function () {
document.getElementById('foo').autocomplete = 'off';
}, 1);
}
これがあなたのために働くかどうか確認してください。唯一の欠点は、Chromeandを使用している人がJavaScriptを無効にしている場合でも、フィールドがオートコンプリート。
autocomplete
属性は、HTML5
で新しく追加されました。
あなたはDOCTYPE
について言及していないので、これが唯一可能な理由だと思います。詳細については、 MDNのフォームのオートコンプリートをオフにする方法 を確認してください。
次のHTML5 DOCTYPE
を追加してみてください。
<!DOCTYPE html>
FYI:一部のブラウザでは、これを機能させるために
autocomplete
関数をアクティブにする必要があります(ブラウザのメニューの[設定]をご覧ください) 。
あなたはautocomplete
elementの下のform
属性に言及して正しい方法で使用しています。ただし、input
タグについて個別に言及する必要はありません。
<form autocomplete="off" id="search_form" method="post" action="">
<input type="text" />
</form>
更新:ここでは、 オートコンプリート属性とXHTMLを使用したWebドキュメント でソリューションのリストを見つけることができます。
これを試して、少しいじってから働いた
if ( navigator.userAgent.toLowerCase().indexOf('chrome') >= 0 ) {
$('input[autocomplete="off"]').each( function(){
var type = $(this).attr( 'type');
$(this).attr( 'type', '_' + type );
$(this).attr( 'type', type );
});
}
AJAX呼び出しを使用してバックエンドにデータを送信する場合。 AJAX呼び出しを完了すると、パスワードフィールドがクリアされます。その後、パスワード保存プロンプトは表示されません。
例:$(#foo).val( "");