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


2791

autocomplete特定のinput(またはform field)の主要なブラウザでどのように無効にしますか?


2
テスターが何度も手動で多くの情報を入力する必要がある一部のシステムでは、構成可能なオプションを設定して、テスト時にそれを無効にして、 'tab>下矢印>タブ>下矢印などを押すだけで役立つ場合があります。 。 '
Simon_Weaver

回答:


2625

Firefox 30はautocomplete="off"パスワードを無視し、パスワードをクライアントに保存するかどうかの代わりにユーザーにプロンプ​​トを表示することを選択します。2014年5月5日の次の解説に注意してください。

  • パスワードマネージャ、パスワードを保存するかどうかを常に確認します。ユーザーの許可なくパスワードを保存することはありません。
  • 私たちは、IEとChromeに次いで、この変更を実装する3番目のブラウザーです。

Mozilla Developer Networkのドキュメントによると、ブールフォーム要素属性はautocomplete、フォームデータが古いブラウザにキャッシュされるのを防ぎます。

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

45
これはFirefox 3.0.3では機能しませんでした。INPUTではなく、FORMにautocomplete属性を配置する必要がありました。
ウィンストンファセット

17
それはあなたがHTML 4に対して実行任意の検証を中断しますので、オートコンプリートのみが、HTML 5規格で定義されています* ...。
Jrgns

96
@Winston、フォームと入力要素自体の両方に配置する必要があります。このようにして、ブラウザーの非標準性をすべてカバーします。
AviD 2010

83
また、ウェブアプリをテストする前に、autocomplete = on拡張機能(Chromeを使用している場合)を無効にすることを忘れないでください。さもなければ、あなたは私のような本当の愚かな気持ちになるでしょう。;)
Jo Liss、2011


314

に加えてautocomplete=off、ページを生成するコードによってフォームフィールド名をランダム化することもできます。名前の末尾にセッション固有の文字列を追加することもできます。

フォームが送信されたら、サーバー側で処理する前にその部分を取り除くことができます。これにより、Webブラウザーがフィールドのコンテキストを見つけることができなくなり、フォーム送信のフィールド名を攻撃者が推測できないため、XSRF攻撃を防ぐのに役立つ場合があります。


10
これは、autocomplete = "off"を使用するよりもはるかに優れたソリューションです。あなたはすべてのページのロードに新しい名前を生成し、将来の使用のために$ _SESSIONにその名前を保存するだけです:$_SESSION['codefield_name'] = md5(uniqid('auth', true));
enchance

78
いいえ、これは優れたソリューションではありません。この設定の優先順位の起点はWebブラウザーとも呼ばれるユーザーエージェントであるためです。特定の動作(HTML 5が実行する動作)のサポートと、ユーザーに代わって決定することによる強制との間には違いがあります。これは、「はるかに優れたソリューション」です。
2013年

15
このソリューションはすべてのブラウザで機能するため、その点で「優れています」。それでも、amnは正しく、ユーザーに代わってオートコンプリートを無効にすることを決定することはお勧めできません。つまり、独自のオートコンプリート機能を構築する予定で、競合や奇妙な動作を望まない場合など、非常に特殊な状況でのみオートコンプリートを無効にします。
macguru2000 2014年

8
XSRF攻撃については、どのような種類の攻撃を描いているのかわかりませんが、サーバー側でフィールドを特定するのと同じ方法で、攻撃者が最後の部分を取り除くことはできませんでしたか?または、攻撃者がフィールドを投稿している場合、サーバーによって削除されるため、独自のランダム文字列を追加することはできませんか?
xr280xr 2015

9
独自のオートコンプリートを構築する@ macguru2000は、完全に合法で一般的な使用例です。本当にブラウザは、簡単に、彼らはこのようなハックを使用するように私たちを強制的に代わりの必要がある場合、開発者は、オートコンプリートを無効にするために作る必要があります
whoadave

235

主要なブラウザーとパスワードマネージャー(正しくは、私見)のほとんどがを無視しautocomplete=offます。

どうして?多くの銀行やその他の「高セキュリティ」のWebサイトがautocomplete=off「セキュリティ目的で」ログインページに追加されていますが、オートコンプリートにより、これらの高セキュリティサイトのパスワードを覚えやすく(そしてクラック)変更するため、実際にはセキュリティが低下します。壊れた。

ずっと前に、ほとんどのパスワードマネージャーはを無視し始めましたがautocomplete=off、今ではブラウザーはユーザー名/パスワードの入力に対してのみ同じことを実行し始めています。

残念ながら、オートコンプリートの実装のバグにより、ユーザー名やパスワードの情報が不適切なフォームフィールドに挿入され、フォーム検証エラーが発生します。さらに、ユーザーが意図的に空白のままにしたフィールドにユーザー名を誤って挿入してしまうこともあります。

Web開発者は何をすべきですか?

  • ページ上のすべてのパスワードフィールドを単独で保持できる場合、パスワードフィールドの存在がユーザー/パスオートコンプリートの開始の主なトリガーであると思われるため、良いスタートです。それ以外の場合は、以下のヒントをお読みください。
  • Safariは2つのパスワードフィールドがあることを認識し、この場合はオートコンプリートを無効にします。これは、ログインフォームではなく、パスワードの変更フォームである必要があると想定しています。したがって、許可するフォームでは必ず2つのパスワードフィールド(新規と新規の確認)を使用してください。
  • Chrome 34は、残念ながら、パスワードフィールドを検出すると、フィールドにuser / passを自動入力しようとします。これはかなり悪いバグで、うまくいけば、Safariの動作が変更されるでしょう。ただし、これをフォームの上部に追加すると、パスワードの自動入力が無効になるようです。

    <input type="text" style="display:none">
    <input type="password" style="display:none">

私はまだIEやFirefoxを徹底的に調査していませんが、コメントに他の情報があれば、喜んで回答を更新します。


5
あなたが何を意味するのです「ページでこれを追加するページの無効オートフィルに思える:」
wutzebaer

5
@ wutzebaer、Chromeは非表示のパスワードフィールドに気づき、オートコンプリートを停止します。報告によれば、これはユーザーが気付かないうちにサイトがパスワード情報を盗むのを防ぐためです。
デビッドW

6
コードスニペットにより、Chrome、Firefox、IE 8、IE 10のログインフィールドのオートコンプリートが妨げられます。IE11はテストしませんでした。まだ機能する単純な答えのみ。
Sam Watkins

3
少なくとも2015年12月の時点で、あなたのサファリノートはChromeでも機能しているようです。ログインフォームのデータをオートコンプリートする登録フォームにユーザー名とパスワードのフィールドがありました。type='password'1つのページに2つのフィールドを作成すると、ブラウザの「パスワードを保存」のオートコンプリートが無視され、ログインフォームでパスワードを1回要求するだけで、登録フォームでパスワードを2回要求する傾向があるため、これは大きな意味を持ちます。
Matt Fletcher、

3
余分なパスワードフィールドが非表示にされていない限り、Chrome 55ではもう機能しないようです。これは目的を無効にします。
jokkedk 2016年

160

時にはでもオートコンプリートオフ=でしょう埋めるために防ぐことはできません、ユーザーやニックネームフィールド間違ったフィールドに資格証明書ではなく。

この回避策は、ブラウザの動作に関するapinsteinの投稿に追加されています。

ブラウザの自動入力を読み取り専用に修正し、フォーカス(書き込みとタブ)に書き込み可能に設定する

 <input type="password" readonly  
     onfocus="this.removeAttribute('readonly');"/>

更新:Mobile Safariはフィールドにカーソルを設定しますが、仮想キーボードを表示しません。新しい修正は以前と同じように機能しますが、仮想キーボードを処理します。

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

ライブデモhttps://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

ブラウザが資格情報を間違ったテキストフィールドに自動入力するため!?

同じフォームにパスワードフィールドがある場合、ChromeとSafariでこの奇妙な動作に気づきました。たぶん、ブラウザは保存された認証情報を挿入するためのパスワードフィールドを探します。次に、DOMのパスワードフィールドの前に表示される最も近いtextlike-inputフィールドを(観察のために推測するだけで)自動入力します。ブラウザは最後のインスタンスであり、制御できないため、

上記のこの読み取り専用の修正は私にとってはうまくいきました。


8
JavaScriptがない場合、フォーム全体が失敗します。-1
ジミー・ケイン

8
@JimmyKaneキーは、最初にjavascriptを使用して属性を追加することでもあります(これは、ここでは行っていませんが、完全を期すために追加しています)。
Trnelson 2015年

@tmelson私は理解していますが、それでもなぜjsを使用して無効にするのですか?ネイティブで改善できるもののjsは避けましょう。繰り返しますが、私はあなたに同意します。
ジミー・ケイン

3
これはIE8では正しく機能しません。読み取り専用のパスワードフィールドは、最初にフォーカスしたときは編集できません。フォーカスを外して再度フォーカスした後でなければ編集できません。いいアイデアですが、残念ながら少しハックすぎて安全に使用できません。
Sam Watkins

これは、すべてのブラウザー(IE 11やIE Edgeなど)では正しく機能しませreadonlyが削除されるとすぐに、その後フィールドを選択すると、オートコンプリートが返されます。
コーディング終了

106
<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

これはInternet ExplorerとMozilla FireFoxで機能しますが、欠点はXHTML標準ではないことです。


これをフォーム要素に追加しても、必ずしもフォーム内の個々の入力に適用されるのを防ぐわけではないことに気付きました。したがって、それをinput要素に直接配置するのがおそらく最善です。
sholsinger

15
実際には@sholsingerです。フォームと入力要素自体の両方に配置するのが最善です。このようにして、ブラウザーの非標準性をすべてカバーします。
AviD 2010

2
悲しいことに、IE 11の時点で、マイクロソフトはこれを尊重しなくなりましたinput type="password"。他のブラウザがこの機能を削除することを選択しないことを願っています。
SamHuckaby 2014年

設定autocomplete="off"には、formクロームのために働いていた唯一のものです。
Andrew

106

Chromeの解決策はautocomplete="new-password"、入力タイプのパスワードに追加することです。以下の例を確認してください。

例:

<form name="myForm"" method="post">
   <input name="user" type="text" />
   <input name="pass" type="password" autocomplete="new-password" />
   <input type="submit">
</form>

パスワードタイプのボックスが見つかると、Chromeは常にそのデータをオートコンプリートしますが、そのボックスを示すのに十分autocomplete = "new-password"です。

これは私にとってはうまくいきます。

注:F12変更が有効になることを確認してください。ブラウザがページをキャッシュに何度も保存します。これは機能しないという悪い印象を与えましたが、ブラウザは実際には変更をもたらしませんでした。


2
これは、type = "password"だけでなく、他のタイプのフィールドでもChromeで機能します。
ジェイク

私はそれをパスワード、メール、テキストタイプで使用し、うまくいきました。私は単純に次のように使用しました:autocomplete = "new"
Crak_mboutin

autocomplete = "nope" name = "pswd"および実際のパスワード入力フィールドの前に<input name = "dummyPassword" type = "password" style = "display:none;">を使用しました。これでうまくいきました。
Denuka


これは、Chromeだけでなく、ほとんどすべてのブラウザーで機能します:autocomplete#Browser_compatibility
アンドリューモートン

60

他の人が言ったように、答えは autocomplete="off"

ただし、これに対するいくつかの回答と重複する質問から、これをオフにしない方がよいことが示唆されているため、特定のケースでこれを使用するのがなぜ良いのかを述べる価値があると思います。

クレジットカード番号を保存しているブラウザを停止することは、ユーザーに任せるべきではありません。多くのユーザーは、それが問題であることにさえ気付かないでしょう。

クレジットカードのセキュリティコードのフィールドではオフにすることが特に重要です。同様に、このページの状態:

「セキュリティコードは決して保存しないでください。その価値は、コードを提供する唯一の方法が物理的なクレジットカードから読み取ることであり、コードを提供した人が実際にカードを持っていることを証明するという仮定に依存しています。」

問題は、それが公共のコンピューター(サイバーカフェ、図書館など)である場合、他のユーザーがカードの詳細を盗むのが簡単であり、自分のマシンでさえ、悪意のあるWebサイトが オートコンプリートデータを盗むです。


7
私がサイトに行って、それがドロップダウンに私のカードを覚えていたら、私は非常に不幸になるでしょう。idは、どうしてそんなに不注意なのだろうかと考え始めます。
Simon_Weaver 2009年

8
はるかに単純な/より重要なケース。私のサイトの管理者部分にあるユーザーのページにアクセスすると、ユーザー名とパスワードが私の管理者ユーザー名とパスワードに設定されますが、これがログインフォームではないことがわかりません。管理者パスワードを記憶させたいのですが、その記憶されたユーザー名/パスワードを編集するユーザーに適用しようとすると、重大なエラーになります。
rjmunro

34

ランダムな文字を使用して、Google Chromeとの無限の戦いを解決しました。常にランダムな文字列でオートコンプリートをレンダリングすると、何も覚えられません。

<input name="name" type="text" autocomplete="rutjfkde">

それが他の人々に役立つことを願っています。


2
これはさらにうまくいきます。ページの読み込みごとにランダムコードを生成する小さなJSを追加し、そのコードを入力フィールドに追加できます。<code> function autoId(){var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for(var i = 0; i <12; i ++){autoId + = dict.charAt(Math.floor(Math.random()* dict.length)); } return autoId; } $( '。autocompleteoff')。attr( 'autocomplete'、autoId()); </ code> autocompleteoffクラスを目的の入力フィールドに追加できます。
Raghuram Kasyap

クロムバージョン68.0.3440.106(公式ビルド)(64ビット)で機能しない
Sukanya Purushothaman

Chromeは、標準化された「オフ」を使用するように修正されました
MacK

1
悲しいことに、それはクロムの標準と呼ばれるものよりもうまく機能します
Nour Lababidi 2018年

1
今日、Chromeがランダムな文字列を「オフ」で上書きすることがわかりました。Chromeの開発者がこの属性を悪用し、管理できないとは信じられません。どうしてそうなんだ。
ステップ

33

オートコンプリートを無効にすることを避けるために言うそれらの答えとは異なることを頼む必要があります。

最初に取り上げるのは、ログインフォームフィールドでオートコンプリートが明示的に無効にされていないことがPCI-DSSの失敗であることです。さらに、ユーザーのローカルマシンが危険にさらされている場合、オートコンプリートデータは平文で保存されているため、攻撃者が簡単に取得できます。

使いやすさについては確かに議論がありますが、どのフォームフィールドでオートコンプリートを無効にするべきか、そうでないべきかに関しては、非常に微妙なバランスがあります。


オートコンプリートを使用してテキスト入力を入力しても、IEがonChangeイベントをトリガーしないことに気づきました。何十ものフォームがあり、1000を超えるonChangeイベント(入力検証、ビジネスロジック)がフォーム全体に散在しています。最近、IEを新しいバージョンにアップグレードし、突然変なことが起こり始めました。幸い、イントラネットアプリを実行していて、オートコンプリートはUXの問題ではなく、オフにするだけの方が簡単です。
Robotron

3
ユーザーのローカルマシンが危険にさらされている場合、それらはねじ込まれています。キーロガーをインストールしたり、偽のSSLルート証明書を追加したり、すべてが偽のプロキシ経由で送信されたりする可能性があります。オートコンプリートを無効にする本当の理由があります-管理者としてログインしてユーザーの編集ページにアクセスすると、割り当てられますそのユーザーは私の管理者のユーザー名とパスワードです。この行動を防ぐ必要があります。
rjmunro

1
ブラウザベンダーは、自分の興味を探しているようです。保存されたパスワード=ユーザーのロックイン。また、オートコンプリートのオン/オフは単純すぎました。意味のあるヒントの複雑な標準(html.spec.whatwg.org/multipage/…)を使用すると、ブラウザがそれぞれのサイトから価値のあるセマンティックデータを収集できるようになりますユーザーの訪問?
aro_tech 2017年

私が解決しようとしている特定のユースケースはこれです:彼らはすでにログインしています。しかし今、彼らはもっともっと敏感なものにアクセスしようとしています。私は、彼らが煙を出すために立ち去り、悪い人が椅子に座ったという可能性に反対して、彼らを再認証させるダイアログを表示したいと思います。オートコンプリートを無効にするためにいくつかのテクニックを試しましたが、何も機能しません。今、少なくとも、おそらく、古き良き 'password = window.prompt( "Please re-enter your password")'とセッションでのユーザー名を使用して、それを認証しようと考えています。
デビッド

31

3つのオプション:最初:

<input type='text' autocomplete='off' />

第二:

<form action='' autocomplete='off'>

3番目(JavaScriptコード):

$('input').attr('autocomplete', 'off');

2
1番目と2番目のオプションは、ブラウザーがこれを処理する方法によって異なるため、1つのオプションにする必要があります。
rybo111

$ formElement.attr( 'autocomplete'、 'off');を試しました。そしてそれは動作しません。
Ben Sinclair

22

関連または実際には、完全に反対のノート-

「前述のフォームのユーザーがオートコンプリート機能を再度有効にしたい場合は、このブックマークレットページから「パスワードを記憶」ブックマークレットを使用autocomplete="off"してください。ページ上のすべてのフォームからすべての属性が削除されます。頑張って戦いましょう! 」


20

実際にsasbを使用しました、1つのサイトでのアイデアを。診療所を運営する医療ソフトのウェブアプリでした。ただし、クライアントの多くは外科医で、セミパブリックターミナルなど、さまざまなワークステーションを使用していました。そのため、自動保存されたパスワードの意味を理解していない、または注意を払っていない医師が、誤って自分のログイン情報に簡単にアクセスできる状態にしないようにしたいと考えていました。もちろん、これはIE8やFF3.1などで取り上げられるプライベートブラウジングの発想の前でした。それでも、多くの医師は病院で古いITブラウザーを使用せざるを得ず、ITは変わりません。

そのため、その投稿でのみ機能するランダムなフィールド名をログインページで生成しました。はい、それはあまり便利ではありませんが、公共の端末にログイン情報を保存しないことについてユーザーを頭にぶつけるだけです。


20

この会話では、解決策のどれも私にとってうまくいきませんでした。

Javascriptを必要としない純粋なHTMLソリューションをついに見つけました、最新のブラウザー(IEを除く、少なくとも1つのキャッチが必要でしたか?)で動作し、フォーム全体のオートコンプリートを無効にする必要がない見つけました。

でオートコンプリートをオフにしてから、フォーム内で機能させたい場合はformオンにしinputます。例えば:

<form autocomplete="off">
    <!-- these inputs will not allow autocomplete and chrome 
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- this field will allow autocomplete to work even 
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>

これはまさに私が探していたものでした!
Marco

20

設定するだけautocomplete="off"。これを行う理由は非常にあります。独自のオートコンプリート機能を提供したい場合です。


20

私は無限の解決策を試みてきました、そして私はこれを見つけました:

autocomplete="off"単に使用する代わりにautocomplete="false"

とてもシンプルで、Google Chromeでも同様に機能します。


クロムで言ったように、オフの値は機能しません。"false"である必要があります
azuax

Chrome 44.0.2403.130で動作します。
GuiGS 2015

1
これを試してみました:$ formElement.attr( 'autocomplete'、 'false'); 申し訳ありませんが動作しません。
Ben Sinclair

20

これでうまくいきます。

<input name="pass" type="password" autocomplete="new-password" />

この戦略は、テキスト、選択などの他のコントロールでも使用できます。


これが最新の答えです。最新のChromeで私に有効な唯一の回答
Nick Chan Abdullah

19

autocomplete=offHTML 5でサポートされていると思います。

ただし、なぜこれを実行するのかを自問してみてください。状況によってはそれが理にかなっている可能性がありますが、それを実行するためだけに実行しないでください。

ユーザーにとっては不便であり、OS Xのセキュリティの問題(以下のSorenが言及)でさえありません。ユーザーがリモートでパスワードを盗まれるのを心配している場合-アプリが使用していても、キーストロークロガーはそれを実行できますautcomplete=off

ブラウザに私の情報の(ほとんど)を記憶させることを選択したユーザーは、サイトが私の情報を覚えていなかったとしても不快だと思います。


17

に加えて

autocomplete="off"

使用する

readonly onfocus="this.removeAttribute('readonly');"

入力のためにあなたは彼らがフォームデータ(覚えてしたくないことをusernamepassword以下に示すように、など):

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

お役に立てれば。


1
IE11では、onfocusがreadonly属性を削除した後でも、テキストボックスに入力できません。ただし、テキストボックスをもう一度クリックすると、入力できます。
mcallahan 2017年

IE11で同じ問題が発生しました(2番目のフォーカスまで入力できません)。ぼかしを追加してから再度フォーカスすると機能します。 $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
パームジー

@Andrewもちろん、できます。これは、この問題を克服するための中心的な原則であり、完全なコード例を含む更新も追加しました;)
MuratYıldızNov

私も追加しましたonfocusout="this.setAttribute('readonly', 'readonly');"
rinatdobr

16

最適なソリューション:

オートコンプリートのユーザー名(または電子メール)とパスワードを禁止する:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

フィールドのオートコンプリートを防ぐ:

<input type="text" name="field" autocomplete="nope">

説明: autocomplete作業を続けるには<input>autocomplete="off"動作しませんが、あなたが変更できるoffように、ランダムな文字列にnope

で動作します:

  • クロム:49、50、51、52、53、54、55、56、57、58、59、60、61、62、63、64

  • Firefox:44、45、46、47、48、49、50、51、52、53、54、55、56、57、58


2
これは予備テストで機能することがわかりました。奇妙なことに、「オフ」は機能しません。
クレイグジェイコブス

これは、Android上のChromeでは機能しません。autocomplete属性の文字列値を設定しようとしましたが、それでも入力の下にオートコンプリート候補として以前のエントリが表示されます。
tebs1200 2018

@ tebs1200どっち?パスワードフィールドまたはテキストフィールド?
カバ

@Cavaの対応が遅れて申し訳ありません。テキストフィールド。設定autocompleteした値は関係ありませんが、以前に入力した値に基づいて提案ドロップダウンが表示されます。デスクトップでは問題ありませんが、Androidクロムでは問題ありません。
tebs1200 2018

14

ゲームに少し遅れました...しかし、私はこの問題に遭遇していくつかの失敗を試しましたが、これはMDNで見つかった私にとってはうまくいきます

場合によっては、autocomplete属性がオフに設定されていても、ブラウザがオートコンプリート値を提案し続けることがあります。この予期しない動作は、開発者にとって非常に不可解です。完全に強制しないための秘訣は、次のように属性にランダムな文字列を割り当てることです。

autocomplete="nope"

13

追加

autocomplete="off"

formタグに追加すると、ブラウザのオートコンプリート(以前にそのフィールドに入力されたもの)がすべて無効になります inputその特定のフォーム内のフィールドます。

テスト済み:

  • Firefox 3.5、4ベータ
  • Internet Explorer 8
  • クロム

13

追加しautocomplete="off"てもカットされません。

入力タイプ属性をに変更しますtype="search"
Googleは、検索タイプの入力に自動入力を適用しません。


4
ハックです。フィールドは検索フィールドではありません。将来的にはこれが問題を引き起こす可能性があります。
Roel、2015

12

フィールドには非標準の名前とIDを使用してください。「名前」ではなく「名前_」を使用してください。その場合、ブラウザはそれを名前フィールドとして認識しません。それの最も良い部分は、これをすべてではなく一部のフィールドに対して行うことができ、一部ではなくすべてのフィールドをオートコンプリートすることです。


これの問題は、他のサイトが「name_」を使用して同じ目的を達成した場合、元の状態に戻ることです。
ConroyP 2008年

3
"mysite_name"にします。他の誰かがそれを使用している場合、私は彼らに質問をします...
スティーブ・パークス

これにより、これらの自動生成ユーティリティの一部が台無しになります
Simon_Weaver

12

無効なXHTMLを回避するために、JavaScriptを使用してこの属性を設定できます。jQueryの使用例:

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

問題は、JavaScriptを使用していないユーザーがオートコンプリート機能を利用できることです。


38
これは無効なxhtmlを回避するのではなく、チェックした後に無効なビットを動的に追加するだけで、有効であると宣言しました!
Andiih

@Andiih:では、オートコンプリートをxhtmlで機能させる方法はありますか?
cherouvim

1
仕事(または目標である仕事をやめる):上記のとおりです。しかし、有効-いいえ。
Andiih

11

autocomplete="off"うまくいかない場合は、これらも試してください:

autocorrect="off" autocapitalize="off" autocomplete="off"

11

報告されてからしばらく経っても、これがまだ問題であるとは思えません。要素が表示されなかったり、画面外に表示されなかったりしたときにSafariが認識していたため、上記の解決策は機能しませんでしたが、次の機能は機能しました。

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

それが誰かに役立つことを願っています!


1
それで、これを実際のユーザー名とパスワードのフィールドの前に置くとうまくいきましたか?ブラウザは実際のものではなくそれらを満たしました
Andrew

11

だからここにあります:

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


1
目に見えるパスワードのフラッシュを防ぐためにテキストボックスのスタイルを設定する場合、良い考えのように見えます。
アンドリュー、

1
おかげで、これで+1になりました。ソリューションの私のバリエーションは、1行で作成することでした:<input oninput = "this.type = 'password'" id = "inputpassword" type = "text">
Hasnaaイブラヒーム

@HasnaaIbraheemのおかげで(:時々読みやすく良いです。
STAV Bodik

11

これは現在ブラウザが無視しているセキュリティ問題です。開発者が機密情報であり、保存すべきではないと考えている開発者であっても、ブラウザーは入力名を使用してコンテンツを識別および保存します。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>

次に、サーバーは次のようにpost変数を処理します。

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']);

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

ブラウザが更新されても、オートコンプリートを無視したいかどうかにかかわらず、すべてが魅力のように機能します。それが私にとって問題を修正する最良の方法でした。


10

ここで述べたハックはどれも私にとって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>

1
この手法を使用しても、FireFoxは実際にはその非表示フィールドを自動入力することに注意してください。このフィールドは、フォームを送信するときに含まれます。安全でない可能性のある接続を介してパスワードが転送されるため、これはおそらく悪いことです。幸いにも追加maxlength="0"すると、Firefoxがフィールドに自動入力するのを防ぐことができます。
Mikal Schacht Jensen

9

入力で使用できます。

例えば;

<input type=text name="test" autocomplete="off" />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.