xhtml1-transitional.dtd
doctype を使用する場合、次のHTMLでクレジットカード番号を収集します
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
W3Cバリデータの警告にフラグを立てます。
「オートコンプリート」属性はありません。
フォームの機密フィールドでブラウザのオートコンプリートを無効にするW3C /標準の方法はありますか?
xhtml1-transitional.dtd
doctype を使用する場合、次のHTMLでクレジットカード番号を収集します
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
W3Cバリデータの警告にフラグを立てます。
「オートコンプリート」属性はありません。
フォームの機密フィールドでブラウザのオートコンプリートを無効にするW3C /標準の方法はありますか?
回答:
ここでは、フォームの自動補完機能に問題(および解決策を)説明してMDCから良い記事です。Microsoftも同様の記事をここに公開しています。
正直なところ、これがユーザーにとって重要なものである場合、このように標準を「破る」ことが適切であると思われます。たとえば、Amazonは 'autocomplete'属性をかなり使用しており、うまく機能しているようです。
警告を完全に削除する場合は、JavaScriptを使用して、それをサポートするブラウザー(IEおよびFirefoxが重要なブラウザー)に属性を適用できます。 someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
最後に、サイトがHTTPSを使用している場合、IEはオートコンプリートを自動的にオフにします(私の知る限り、他のブラウザも同様です)。
更新
この回答にはまだかなりの賛成票があるため、HTML5ではフォーム要素の 'autocomplete'属性を使用できることを指摘しておきます。これについては、W3C のドキュメントを参照してください。
W3Cが(X)HTML4で機能する方法を提案していたとしたら、私は非常に驚きます。オートコンプリート機能は完全にブラウザベースであり、過去数年間に導入されました(HTML4標準が作成された後)。
ただし、HTML5に含まれていても驚くことはありません。
編集:思ったとおり、HTML5にはその機能があります。ページをHTML5として定義するには、次のdoctypeを使用します(つまり、これをソースコードの最初のテキストとして配置します)。まだドラフト形式であるため、すべてのブラウザがこの標準をサポートしているわけではないことに注意してください。
<!DOCTYPE html>
HTML 4:いいえ
HTML 5:はい
オートコンプリート属性は列挙された属性です。属性には2つの状態があります。上の状態でのキーワードマップ、オフ 、オフ状態にキーワードマップ。属性も省略できます。欠損値のデフォルトはオン状態です。オフの状態は、デフォルトでは、フォーム内のフォームコントロールがに彼らのオートフィルのフィールド名を設定していることを示しますオフ。オン状態は、デフォルトで、フォーム内のフォームコントロールの
autofill
フィールド名が「オン」に設定されることを示します。
リファレンス:W3
いいえ。ただし、ブラウザのオートコンプリートは、多くの場合、name
以前に入力されたフィールドと同じ属性を持つフィールドによってトリガーされます。ランダムなフィールド名を作成する巧妙な方法を整えることができた場合、オートコンプリートは以前に入力されたフィールドの値をプルすることができません。
入力フィールドに " email_<?= randomNumber() ?>
"のような名前を付け、POSTまたはGET変数を介してこのデータループを受け取るスクリプトで、パターン " email_[some number]
"に一致するものを探す場合、これを取り除くことができます(これは(実際には)ブラウザに関係なく、成功が保証されています。
いいえ、良い記事がMozila Wikiにあります。
引き続き無効を使用しますattribute
。これは、実用主義が検証に勝つべきだと思います。
JavaScriptで設定してみませんか?
var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false
完璧ではありませんが、HTMLは有効です。
4つのタイプの入力すべてをキャッチすることをお勧めします。
$('form,input,select,textarea').attr("autocomplete", "off");
参照:
:input
あまりにも使用できる
jQueryを使用する場合、次のようなことができます。
$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});
必要な場所でautocompleteOffクラスを使用します。
<input type="text" name="fieldName" id="fieldId" class="firstCSSClass otherCSSClass autocompleteOff" />
すべての入力をにしたい場合はautocomplete=off
、それを単純に使用できます。
$(document).ready(function(){$("input").attr("autocomplete","off");});
autocomplete
以外の方法で(無効な)属性を設定しているだけです
$('input.autocompleteOff').val('');
大丈夫そうなのを使ってきました。
別の方法-セキュリティにも役立ちますが、入力ボックスを表示するたびに別の名前を呼び出すことです:キャプターのように。このように、セッションは1回限りの入力を読み取ることができ、オートコンプリートは何も実行しません。
ブラウザエクスペリエンスを妨害する必要があるかどうかについてのrmeadorの質問に関する一点:私たちは連絡先管理とCRMシステムを開発しており、他の人のデータをフォームに入力するときに、自分の詳細を常に示唆したくない場合があります。
これは私たちのニーズに対応しますが、ユーザーに適切なブラウザを入手するように伝える贅沢があります:)
autocomplete='off'
autocomplete="off"
これにより、すべての最新ブラウザーの問題が修正されます。
<form name="form1" id="form1" method="post" autocomplete="off"
action="http://www.example.com/form.cgi">
[...]
</form>
Geckoブラウザーの現在のバージョンでは、autocomplete属性が完全に機能します。以前のバージョンの場合、Netscape 6.2に戻ると、「アドレス」と「名前」のフォームを除いて機能しました
更新
場合によっては、autocomplete属性がオフに設定されていても、ブラウザーはオートコンプリート値を提案し続けることがあります。この予期しない動作は、開発者にとって非常に不可解です。オートコンプリーションを強制的に実行するコツは、属性にランダムな文字列を割り当てることです。次に例を示します。
autocomplete="nope"
このランダムな値はでないためvalid one
、ブラウザはあきらめます。
ランダムな 'name'属性を使用するとうまくいきます。
フォームの送信時にname属性をリセットして、フォームの送信時に名前でアクセスできるようにします。(名前を格納するためにid属性を使用)
オートコンプリート属性の場所については、いくつかの混乱があることに注意してください。これは、FORMタグ全体または個々のINPUTタグのいずれかに適用できます。これは、HTML5の前に実際には標準化されていませんでした(両方の 場所を明示的に許可しています)。古いドキュメント、特にこのMozillaの記事では、FORMタグについてのみ言及しています。同時に、一部のセキュリティスキャナーはINPUTタグでオートコンプリートのみを検索し、それが欠落している場合は(親FORMにある場合でも)エラーを出します。この混乱のより詳細な分析がここに掲載されていますオートコンプリート= OFFの混乱は、HTMLフォームの属性。
if (document.getElementsByTagName) {
var inputElements = document.getElementsByTagName("input");
for (i=0; inputElements[i]; i++) {
if (inputElements[i].className && (inputElements[i].className.indexOf("disableAutoComplete") != -1)) {
inputElements[i].setAttribute("autocomplete","off");
}
}
}
<script type="text/javascript">
/* <![CDATA[ */
document.write('<input type="text" id="cardNumber" name="cardNumber" autocom'+'plete="off"/>');
/* ]]> */
</script>