Chromeはautocomplete =“ off”を無視します


443

タグボックスのドロップダウンを使用するWebアプリケーションを作成しました。これは、Chromeブラウザー(バージョン21.0.1180.89)を除くすべてのブラウザーで正常に動作します。

フィールドと属性を持つinputフィールドの両方にもかかわらず、Chromeは、フィールドの以前のエントリのドロップダウン履歴を表示することを要求します。これにより、タグボックスリストが消去されます。formautocomplete="off"


10
技術的に、この質問は、「この質問にはすでにここで回答があります」と呼ばれるものの約5か月前に尋ねられました。これは、この後の複製です。
user3071434

回答:


318

更新

Chromeはstyle="display: none;"or style="visibility: hidden;属性を無視しているようです。

次のように変更できます。

<input style="opacity: 0;position: absolute;">
<input type="password" style="opacity: 0;position: absolute;">

私の経験では、Chromeは最初<input type="password">と前ののみをオートコンプリートし<input>ます。だから私は追加しました:

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

の上に、<form>ケースが解決しました。


54
これはもう機能しませんchrome 40はこのソリューションで機能しません
user881703

8
これは醜いだけでなく、なぜWhy質問の説明見つかりませんか?
オーガスティンリーディンガー2015年

4
Chromeは現在、表示の場合はそれらを無視しているようです。何も使用されていないため、絶対配置でフィールドをビューの外に移動しました...
Christoph Leiter

1
display: none;要素は消えますが、オートコンプリートについては何も起こりません。
Sandun Perera

276

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

<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


フィールドのオートコンプリートを無効にするための他の「解決策」(それを行う正しい方法ではありませんが、機能します):

1。

HTML:

<input type="password" id="some_id" autocomplete="new-password">

JS(オンロード):

(function() {
    var some_id = document.getElementById('some_id');
    some_id.type = 'text';
    some_id.removeAttribute('autocomplete');
})();

またはjQueryを使用

$(document).ready(function() {
    var some_id = $('#some_id');
    some_id.prop('type', 'text');
    some_id.removeAttr('autocomplete');
});

2。

HTML:

<form id="form"></form>

JS(オンロード):

(function() {
    var input = document.createElement('INPUT');
    input.type = 'text';
    document.getElementById('form').appendChild(input);
})();

またはjQueryを使用

$(document).ready(function() {
    $('<input>', {
        type: 'text'
    }).appendTo($('#form'));
});

jQueryを使用して複数のフィールドを追加するには:

function addField(label) {
  var div = $('<div>');
  var input = $('<input>', {
    type: 'text'
  });
  
  if(label) {
    var label = $('<label>', {
      text: label
    });
    
    label.append(input);
    div.append(label);    
  } else {
    div.append(input);    
  }  
  
  div.appendTo($('#form'));
}

$(document).ready(function() {
  addField();
  addField('Field 1: ');  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form"></form>


で動作します:

  • Chrome:49以上

  • Firefox:44以上


コードはありません。autocomplete= ""がブール値を受け入れるだけの場合、答えは実際にはどのようにオートコンプリートを防止しますか
Tallboy

autocomplete = "new-password"をパスワードフィールドに割り当てると、Chromeで動作しました。フォームのautocomplete = "off"は含まれていません。
Second2None

2
最も重要な(そして私にとってうまくいった唯一のこと)は、<input>フィールドのIDおよびNameプロパティに「Username」または「Password」が含まれていないことを確実に確認することでした。これにより、autocomplete = "off"ですべてのオートコンプリートが実質的に停止しました。
GONeale

new-password実際にはパスワードではないすべての非表示の入力の良いキャッチです、ありがとう
antongorodezkiy

autocomplete="nope"両方のフォームフィールドに追加しない限り、Lolは実際に機能しました。どちらのフィールドにも設定できるので、そのフィールドはオートコンプリートされませんが、他のフィールドはオートコンプリートのままですが、両方のフィールドに配置するとすぐに、両方が再びオートコンプリートを開始します。
PrintlnParams

147

タグautocomplete="off"上にない限り、Chromeは無視するようになりました<form autocomplete="off">


Reactの場合は「autoComplete = off」を使用します。
zero_cool 2016年

Chromeがこの変更を行った理由の説明については、次の回答を参照してください:stackoverflow.com/a/39689037/1766230-開発者よりもユーザーを優先します。
ルーク

12
autocomplete = "off"を使用する正当な理由をChromeチームに提供したい場合は、こちらから行ってください:bugs.chromium.org/p/chromium/issues/detail?id
Chris

@Digggid Chrome 71は属性を無視しませんが、「オフ」値を無視する場合があります。「country」のような値を使用することはまだ私のために働きます。
Burak

1
競合するレポートがあるため、上記の説明のみを行います。formタグにautocomplete = "off"を追加し、個々の入力タグにautocomplete = "new-password"を追加します。Chrome 75以降
AndyP9

83

現代的なアプローチ

入力readonlyを行い、焦点を合わせて削除します。これは非常に単純なアプローチであり、ブラウザーはreadonly入力を取り込みません。したがって、このメソッドは受け入れられ、将来のブラウザの更新によって上書きされることはありません。

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

次の部分はオプションです。入力のスタイルに合わせて、readonly入力のように見えないようにします。

input[readonly] {
     cursor: text;
     background-color: #fff;
}

使用例


49
@Basit-それが私がと呼んだ理由modern approachです。Javascriptがオフになっているのは、世界中のユーザーの1%未満です。正直なところ、大多数のWebサイトがJavascriptに依存している場合、そのような小さなオーディエンスに対応することは誰にとっても価値がありません。現在、非常に長い間Webサイトを開発しており、私のサイトの100%はJavaScriptを使用しており、Javascriptに大きく依存しています。ユーザーがJavaScriptをオフにしている場合、それは私の問題であり、私の選択ではありません。無効にすると、オンラインのWebサイトの少なくとも90%にアクセスしたり使用したりできなくなります...反対票はまったく関係ありません。
Fizzix 2015年

19
これは今日49では機能しません。Chromeの「開発者」は、stackoverflowソリューションを監視して削除しています。
puchu

7
2015年9月のこの回答は、基本的には2014年11月の回答のコピーです。
2016

5
2019-機能しません。
user2060451

1
これはスクリーンリーダーを壊します
Greg

80

信頼できる回避策として、このコードをレイアウトページに追加できます。

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

Chromeは、フォームに他のオートコンプリート値を持つ少なくとも1つの他の入力要素がある場合にのみautocomplete = offを尊重します。

これはパスワードフィールドでは機能しません。これらのフィールドは、Chromeではまったく異なる方法で処理されます。詳細については、https://code.google.com/p/chromium/issues/detail?id = 468153を参照してください。

更新:2016年3月11日、Chromiumチームによってバグが「修正されない」としてクローズされました。完全な説明については、最初に提出したバグレポートの最後のコメントを参照してください。TL; DR:autocomplete = "new-street-address"などのセマンティックオートコンプリート属性を使用して、Chromeがオートフィルを実行しないようにします。


2
@ジョナサン・カウリー・トム:自分の回避策を含む、私が作成したこれらのテストページを試してください。でhub.securevideo.com/Support/AutocompleteOn、あなたはクロームオートコンプリート候補が表示されるはずです。次に、hub.securevideo.com/Support/AutocompleteOffで同じエントリを試します。Chromeのオートコンプリートの候補は表示されません。私はこれをChrome 45.0.2454.101mと46.0.2490.71mでテストしたところ、両方で期待どおりに動作しました。
JTテイラー

この問題に関するもう1つの更新:Chromeチームから、これが修正されたという通知を受け取りました。したがって、うまくいけば、この回避策はすぐに不要になります!
JTテイラー

上記の私の投稿を参照してください:「これはパスワードフィールドでは機能しません。これらはChromeでは非常に異なって処理されます。詳細はcode.google.com/p/chromium/issues/detail?id=468153を参照してください。」
JTテイラー

45

さて、パーティーには少し遅れましたが、どうやって機能autocompleteすべきか、機能すべきでないかについて、少し誤解があるようです。HTML仕様によれば、ユーザーエージェント(この場合はChrome)は次のものをオーバーライドできますautocomplete

https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute

ユーザーエージェントは、ユーザーが要素の自動入力フィールド名を上書きすることを許可する場合があります。たとえば、「オフ」から「オン」に変更して、ページの作成者の異議にもかかわらず値を記憶して事前入力できるようにしたり、常に「オフ」にして記憶しないようにしたりできます。値。ただし、ユーザーエージェントは、サイトの設定に関係なくすべての値が常に記憶される場合、ユーザーに重大なセキュリティ上の影響があるため、ユーザーが自動入力フィールド名を「オフ」から「オン」またはその他の値に簡単に上書きすることを許可しないでください。

したがって、Chromeの場合、開発者は基本的に「これをユーザーに任せて、autocomplete作業するかどうかをプリファレンスで決定します。それが必要ない場合は、ブラウザーで有効にしないでください」 。

しかし、これは私の好みでは少し熱心すぎるようですが、それは現状です。この仕様では、このような移動の潜在的なセキュリティへの影響についても説明しています。

「off」キーワードは、コントロールの入力データが特に機密であることを示します(たとえば、核兵器のアクティベーションコード)。または、それが再利用されることのない値(銀行ログインのワンタイムキーなど)であり、ユーザーがUAに依存して事前入力する代わりに、毎回明示的にデータを入力する必要があること彼にとっての価値 または、ドキュメントが独自のオートコンプリートメカニズムを提供し、ユーザーエージェントがオートコンプリート値を提供することを望まないこと。

だから、他の皆と同じフラストレーションを経験した後、私は私のために働く解決策を見つけました。それはautocomplete="false"答えに似ています。

Mozillaの記事は、まさにこの問題について述べています。

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

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

したがって、次のコード機能するはずです。

autocomplete="nope"

また、以下のそれぞれについても同様です。

autocomplete="false"
autocomplete="foo"
autocomplete="bar"

私が目にする問題は、ブラウザエージェントがautocomplete属性を学習し、次にフォームを表示するときにそれを適用するのに十分賢いということです。これを行う場合、問題を回避する唯一の方法autocompleteは、ページの生成時に属性値を動的に変更することです。

言及する価値のある点の1つは、多くのブラウザがautocompleteログインフィールド(ユーザー名とパスワード)の設定を無視することです。Mozillaの記事にあるように:

このため、最近のブラウザの多くは、ログインフィールドのautocomplete = "off"をサポートしていません。

  • サイトがフォームにautocomplete = "off"を設定し、フォームにユーザー名とパスワードの入力フィールドが含まれている場合でも、ブラウザーはこのログインを記憶することを提案し、ユーザーが同意すると、ブラウザーは次にこれらのフィールドを自動入力しますユーザーがこのページにアクセスします。
  • サイトがユーザー名とパスワードの入力フィールドにautocomplete = "off"を設定している場合でも、ブラウザはこのログインを記憶することを提案し、ユーザーが同意すると、ユーザーが次にこのページにアクセスしたときにブラウザはそれらのフィールドを自動入力します。

これは、Firefox(バージョン38以降)、Google Chrome(34以降)、およびInternet Explorer(バージョン11以降)での動作です。

最後に、属性がform要素に属しているか要素に属しているかについての小さな情報input。仕様には答えがあります:

autocomplete属性を省略した場合は、代わりに要素のフォーム所有者のautocomplete属性の状態に対応するデフォルト値が使用されます( "on"または "off")。フォームの所有者がいない場合は、値「on」が使用されます。

そう。フォームに入力すると、すべての入力フィールドに適用されます。個々の要素に配置することは、その要素だけに適用する必要があります(フォームに要素がない場合でも)。autocompleteがまったく設定されていない場合、デフォルトでになりonます。

概要

autocompleteフォーム全体で無効にするには:

<form autocomplete="off" ...>

または、動的に行う必要がある場合:

<form autocomplete="random-string" ...>

autocomplete個々の要素を無効にするには(フォームの設定の有無に関係なく)

<input autocomplete="off" ...>

または、動的に行う必要がある場合:

<input autocomplete="random-string" ...>

また、特定のユーザーエージェントは、無効にしようとする最も困難な試みでさえもオーバーライドできることを覚えておいてくださいautocomplete


1
2019-機能しません。バージョン76.0
user2060451

1
@ user2060451-何が機能しないのですか?WindowsとMacの76.0.3809.87でテストしました。-どちらも仕様どおりに動作します。上記のように。「機能しない」よりも少し多くの説明を提供していただければ、私がお手伝いできるかもしれません。
Hooligancat

1
入力要素のオートコンプリート用のランダムな文字列を(すべてがロードされた後、コンソールからサーバー側に設定して)ランダムな文字列を指定しようとしましたが、機能しませんでした。フォーム要素にautocomplete = "off"を指定しても機能しませんでした。
Nuryagdy Mustapayev


29

クロームバージョン34は今無視しautocomplete=offこれを参照してください

これが良いことなのか悪いことなのかについての議論たくさんありますか?あなたの考えはどうですか?


7
反対投票して申し訳ありません...これはディスカッションサイトではありません(代わりにquoraを試してください)。答えはありません。リンクありがとうございます。
commonpike

25

ブラウザはautocomplete = off autoを気にしないか、資格情報を間違ったテキストフィールドに入力しますか?

ユーザーがクリックするか、このフィールドにタブキーを使用したときに、パスワードフィールドを読み取り専用に設定してアクティブ化することで、問題を修正しました。

ブラウザの自動入力を修正:読み取り専用にして、フォーカスを書き込み可能に設定します(マウスクリックでフィールドをタブで移動)

 <input type="password" readonly  
     onfocus="$(this).removeAttr('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でこの奇妙な動作が発生することがありますおそらく、ブラウザは保存された認証情報を挿入するためのパスワードフィールドを探します。そして、それが自動入力ユーザー名を前にパスワードフィールドを表示さ最寄りtextlike、入力フィールドの中に(ちょうど観測による推測)DOMに。ブラウザは最後のインスタンスであり、それを制御できないため、autocomplete = offでも、ユーザーまたはニックネームのフィールドではなく、資格情報を間違ったフィールドに入力することを妨げない場合があります。


2
onfocusを使用するのではなく、setTimeoutを使用して読み取り専用をクリアするので、ユーザーは入力が読み取り専用であることに気づかず、決してフォーカスしません。
Hippyjim 2015

23

使用できます autocomplete="new-password"

<input type="email" name="email">
<input type="password" name="password" autocomplete="new-password">

で動作します:

  • クロム:53、54、55
  • Firefox:48、49、50

オートコンプリート文字列が修正されているため、これは機能しません。ブラウザは次回のために新しいパスワードを記憶します。
ステップ

23

TL; DR:これは新しいパスワード入力であり、オートコンプリートの候補として古いパスワードを提供しないことをChromeに伝えます。

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

autocomplete="off" は設計上の決定が原因で機能しません-多くの調査によると、ユーザーがブラウザーまたはパスワードマネージャーにパスワードを保存できる場合、パスワードをハッキングするのは非常に長く困難です。

の仕様autocomplete が変更され、ログインフォームの自動入力を容易にするためにさまざまな値がサポートされるようになりました。

<!-- Auto fills with the username for the site, even though it's email format -->
<input type="email" name="email" autocomplete="username">

<!-- current-password will populate for the matched username input  -->
<input type="password" autocomplete="current-password" />

これらを提供しない場合でも、Chromeは推測を試みます、そうした場合は無視しautocomplete="off"ます。

解決策は、autocompleteパスワードリセットフォームにも値が存在することです。

<label>Enter your old password:
    <input type="password" autocomplete="current-password" name="pass-old" />
</label>
<label>Enter your new password:
    <input type="password" autocomplete="new-password" name="pass-new" />
</label>
<label>Please repeat it to be sure:
    <input type="password" autocomplete="new-password" name="pass-repeat" />
</label>

このautocomplete="new-password"フラグを使用して、このサイトにパスワードが保存されている場合でも、パスワードを推測しないようChromeに指示できます。

Chromeは、認証情報APIを使用してサイトのパスワードを直接管理することもできます。これは標準であり、おそらく将来的にはユニバーサルサポートになる予定です。


5
本当に説得力のある理由ではありません。ユーザーが何かを望んでいるからといって、それが賢い考えであるとは限りません。ユーザーがより便利だと思うので、アプリケーションで単一文字のパスワードを許可すると言っているのとほとんど同じです。時々、セキュリティが利便性よりも優先されます...
Daniel Kotin 2014

ChromeがEmailAddressの入力を要求する「ContactNoAlt」というフィールドがあります。オートコンプリートのオン/オフが推奨されますが、Chromeは脆弱であるため、実用的なレベルでの回避策が必要です。もっとはっきりとautocomplete = "off"は標準です-したがって、Chromeの開発者は標準を無視できると感じるほど優れているのです-おそらくいつの日か、Chromeは他のHTMLの一部が不便であると判断します....(これは始まりましたIE5 / 6 de-ja-vuのように感じる)
dunxz 14

私はChromeユーザーで、この動作はしたくありません。関連するWebアプリケーションにのみアクセスできることを確認するために、ポップアップ表示されていたパスワードボックスを自動入力する前に、私は尋ねませんでした。一部のパスワードを保存しても、すべてのパスワードがオートコンプリートされるわけではありません。
Hippyjim 2015

3
この回答(およびGoogleの動作)は、これを実行したい主な理由の1つが独自の(たとえば、データベースからのリスト)自動補完動作を実装することであるという事実を無視しています。
squarelogic.hayden 2015

あなたはクロムによってなされた明らかに悪い決定を守ろうとしている。私は変更できない会社の方針を実行しています。だから今私はクロムのハックを挿入する必要があります。彼らは現在働いています。彼らが仕事をやめる場合、当社は従業員のデフォルトのブラウザを変更します。これで、同じ動作になりますが、ハッキングが発生し、将来のアップグレードでページが壊れる可能性があります。そして、ここでこれらすべての答えを見ると、これらのハックを使用している開発者がたくさんいます。よくやったクローム。
Claudiu Creanga

23

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

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

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


12

Autocomplete="Off" もう機能しません。

"Off"たとえば、代わりにランダムな文字列のみを使用してみてくださいAutocomplete="NoAutocomplete"

お役に立てば幸いです。


5
Chrome 73では機能しません
just_user

10

クロームはを無視しautocomplete="off"、「偽の入力」を使用してクロームをだまし、「実際の」クロームを埋めるのではなく、それを埋めるという愚かな方法で解決します。

例:

<input type="text" name="username" style="display:none" value="fake input" /> 
<input type="text" name="username" value="real input"/>

Chromeは「偽の入力」を埋め、送信時にサーバーは「実際の入力」の値を取得します。


10

私はこの答えを投稿して、この問題の更新された解決策をもたらします。私は現在Chrome 49を使用していますが、これに対する回答はありません。他のブラウザや以前のバージョンで動作するソリューションも探しています。

このコードをフォームの最初に配置します

<div style="display: none;">
    <input type="text" autocomplete="new-password">
    <input type="password" autocomplete="new-password">
</div>

次に、実際のパスワードフィールドには、

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

これが機能しなくなった場合、または別のブラウザーまたはバージョンで問題が発生した場合は、この回答にコメントしてください。

承認:

  • クロム:49
  • Firefox:44、45
  • エッジ:25
  • Internet Explorer:11

1
残念ながら、Chromeバージョン49.0.2623.87はTextBoxでは機能しませんが、オートコンプリートのポップアップが表示されます。
eYe 2016年

8

これに対する解決策を探している人に、私は最終的にそれを理解します。

Chromeは、ページがHTML5ページである場合にのみ、autocomplete = "off"に従います(XHTMLを使用していました)。

ページをHTML5に変換したところ、問題は解消されました(facepalm)。


6

入力タイプ属性をに変更しますtype="search"

Googleは、検索タイプの入力に自動入力を適用しません。


1
私は反対投票します:chrome 60でテストしました:これはオートコンプリートを妨げません..
boly38

6

この先週まで、以下の2つのソリューションはChrome、IE、Firefoxで機能するように見えました。ただし、Chromeバージョン48のリリース(および49のまま)では、機能しなくなりました。

  1. フォームの上部にある次の項目:
<input style="display:none" type="text" name="fakeUsername"/>
<input style="display:none" type="password" name="fakePassword"/>
  1. パスワードinput要素の次のとおりです。

    autocomplete = "off"

そのため、これをすばやく修正するために、最初にパスワード入力要素を無効に設定する大規模なハックを試み、次にドキュメント準備機能でsetTimeoutを使用して再度有効にしました。

setTimeout(function(){$('#PasswordData').prop('disabled', false);}, 50);

しかし、これは非常に奇妙に思え、私はさらに検索を行ったところ、Chrome自動入力無効にするで @tibaltsの回答が見つかりました。彼の答えは、パスワード入力にautocomplete = "new-password"を使用することであり、これはすべてのブラウザーで機能するようです(この段階では、修正番号1を保持しています)。

これは、Google Chrome開発者ディスカッションのリンクです。https//code.google.com/p/chromium/issues/detail?id = 370363#c7


@JorgeSampayoパスワード入力でのみ機能し、テキスト入力では機能しません。
eYe 2016年

6

autocomplete=off 最近のブラウザではほとんど無視されています-主にパスワードマネージャなどが原因です。

これを追加しautocomplete="new-password"てみると、すべてのブラウザで完全にサポートされているわけではありませんが、一部のブラウザでは機能します


6

autocomplete="off"通常は機能しますが、常に機能するとは限りません。name入力フィールドによって異なります。「アドレス」、「メール」、「名前」などの名前-オートコンプリートされます(ブラウザはユーザーを助けると考えます)。「コード」、「ピン」などのフィールドautocomplete="off"はオートコンプリートされません(設定されている場合)

私の問題は-オートコンプリートがGoogle アドレスヘルパーを乱していた

名前を変更して修正しました

から

<input type="text" name="address" autocomplete="off">

<input type="text" name="the_address" autocomplete="off">

クロム71でテスト済み。


1
これがオートコンプリートを削除する最新の方法だと思います。2020年5月に
Chrome


5

これが私の場合にうまくいった理由はわかりませんが、私が使用autocomplete="none"したChromeでは、Chromeがテキストフィールドのアドレスの提案をやめました。


4

Chrome 42以降、このスレッド(の時点2015-05-21T12:50:23+00:00)のソリューション/ハックは、個々のフィールドまたはフォーム全体のオートコンプリートを無効にするために機能しません。

編集:display: noneオートコンプリートを防ぐために、他のフィールドの前にフォームにダミーのメールフィールドを1つだけ挿入する必要があることがわかりました(これをで非表示にできます)。chromeは、オートコンプリートされたフィールドごとにある種のフォームシグネチャを格納し、別のメールフィールドを含めると、このシグネチャが破損し、オートコンプリートが妨げられると思います。

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

良い知らせは、「フォーム署名」がこれによって破損しているため、どのフィールドもオートコンプリートされないため、送信前に偽のフィールドをクリアするためにJSが必要ないことです。

古い答え:

私がまだ実行可能であることがわかった唯一のことは、実際のフィールドの前にタイプが電子メールとパスワードの2つのダミーフィールドを挿入することです。それらをdisplay: none非表示にするように設定できます(これらのフィールドを無視するほど賢くはありません)。

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="password" name="fake_password" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

残念ながら、フィールドはフォーム内にある必要があります(そうでない場合、両方の入力セットが自動入力されます)。したがって、偽のフィールドが本当に無視されるようにするには、フォーム送信で実行するJSをいくつかクリアして、それらをクリアする必要があります。

form.addEventListener('submit', function() {
    form.elements['fake_email'].value = '';
    form.elements['fake_password'].value = '';
});

上記から、JavaScriptで値をクリアすると、オートコンプリートが上書きされることに注意してください。したがって、JSを無効にして適切な動作を失うことが許容できる場合は、ChromeのJSオートコンプリート「ポリフィル」を使用して、これらすべてを単純化できます。

(function(document) {

    function polyfillAutocomplete(nodes) {

        for(var i = 0, length = nodes.length; i < length; i++) {

            if(nodes[i].getAttribute('autocomplete') === 'off') {

                nodes[i].value = '';
            }
        }
    }

    setTimeout(function() {

        polyfillAutocomplete(document.getElementsByTagName('input'));
        polyfillAutocomplete(document.getElementsByTagName('textarea'));

    }, 1);

})(window.document);

4

入力フィールドに名前または電子メールのいずれかが使用されるという同様の問題がありました。autocomplete = "off"を設定しましたが、Chromeは引き続き提案を強制しました。プレースホルダーテキストに「name」と「email」という単語が含まれていることが原因でした。

例えば

<input type="text" placeholder="name or email" autocomplete="off" />

プレースホルダーの単語にゼロ幅のスペースを入れることで回避しました。Chromeのオートコンプリートはありません。

<input type="text" placeholder="nam&#8203;e or emai&#8203;l" autocomplete="off" />

4

Chrome 48以降では、次のソリューションを使用します。

  1. 偽のフィールドを実際のフィールドの前に置きます:

    <form autocomplete="off">
      <input name="fake_email"    class="visually-hidden" type="text">
      <input name="fake_password" class="visually-hidden" type="password">
    
      <input autocomplete="off" name="email"    type="text">
      <input autocomplete="off" name="password" type="password">
    </form>
  2. 偽のフィールドを非表示にする:

    .visually-hidden {
      margin: -1px;
      padding: 0;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip: rect(0 0 0 0);
      clip: rect(0, 0, 0, 0);
      position: absolute;
    }
  3. できたね!

また、これは古いバージョンでも機能します。


@yivo ursとogの答えの違いは!importantタグだけなので、追加しましたが、まだ機能しません。dropbox.com/s/24yaz6ut7ygkoql/…–
マイクパーセル

@MikePurcellあなたはタグを持っautocomplete="off"ていませんform。また、formタグの直後に偽の入力を配置するようにしてください。
yivo 2017

@Yivo:提案を試してみましたが、電子メールフィールドでは問題なく機能しましたが、パスワードフィールドでは自動入力ドロップダウンが引き続き発生します。dropbox.com/s/5pm5hjtx1s7eqt3/…–
マイクパーセル

3

設定クロム対34、後autocomplete="off"<form>タグdoesnの`tの仕事

この厄介な動作を回避するために変更を加えました。

  1. パスワード入力のnameおよびを削除しidます
  2. (例:入力にクラスを入れてpasswordInput

(これまでのところ、Chromeは入力に保存されたパスワードを入力しませんが、フォームは壊れています)

最後に、フォームを機能させるには、ユーザーが送信ボタンをクリックしたとき、またはフォームの送信をトリガーしたいときはいつでも、次のコードを実行します。

var sI = $(".passwordInput")[0];
$(sI).attr("id", "password");
$(sI).attr("name", "password");

私の場合、id="password" name="password"以前はパスワードを入力する必要があったので、送信をトリガーする前に元に戻しました。


3

すべての解決策を試した後、次はクロムバージョン:45で機能しているようですが、フォームにパスワードフィールドがあります。

 jQuery('document').ready(function(){
        //For disabling Chrome Autocomplete
        jQuery( ":text" ).attr('autocomplete','pre'+Math.random(0,100000000));
 });

3

Chrome 49にアップデートしましたが、Diogo Cidのソリューションが機能しなくなりました。

ページが読み込まれた後、実行時にフィールドを非表示および削除する別の回避策を作成しました。

Chromeは、最初に表示された type="password"フィールドとその前のtype="text"フィールドに資格情報を適用する元の回避策を無視するため、CSSを使用して両方のフィールドを非表示にしました visibility: hidden;

<!-- HTML -->
<form>
    <!-- Fake fields -->
    <input class="chromeHack-autocomplete">
    <input type="password" class="chromeHack-autocomplete">

    <input type="text" placeholder="e-mail" autocomplete="off" />
    <input type="password" placeholder="Password" autocomplete="off" />
</form>

<!-- CSS -->
.chromeHack-autocomplete {
    height: 0px !important;
    width: 0px !important;
    opacity: 0 !important;
    padding: 0 !important; margin: 0 !important;
}

<!--JavaScript (jQuery) -->
jQuery(window).load(function() {
    $(".chromeHack-autocomplete").delay(100).hide(0, function() {
        $(this).remove();
    });
});

あまりエレガントに見えないかもしれませんが、動作します。


2

私はこの解決策が最も適切であることを発見しました:

function clearChromeAutocomplete()
{
// not possible, let's try: 
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) 
{
document.getElementById('adminForm').setAttribute('autocomplete', 'off'); 
setTimeout(function () {
        document.getElementById('adminForm').setAttribute('autocomplete', 'on'); 
}, 1500);
}
}

DOMの準備が整った後、またはフォームがレンダリングされた後にロードする必要があります。


2

オートコンプリートはユーザーが選択するべきだと私は同意しますが、Chromeはそれに対して熱心すぎます(他のブラウザもそうかもしれません)。たとえば、別の名前のパスワードフィールドには、保存されたパスワードが自動的に入力され、前のフィールドにはユーザー名が入力されます。これは特に、フォームがWebアプリのユーザー管理フォームであり、自動入力で独自の認証情報を入力したくない場合に役立ちます。

現在、Chromeはautocomplete = "off"を完全に無視しています。JSハックはうまくいくかもしれませんが、執筆時に機能する簡単な方法を見つけました。

パスワードフィールドの値を制御文字8("\x08"PHPまたは&#8; HTML)に設定します。これにより、フィールドに値があるため自動入力が停止されますが、これはバックスペース文字であるため、実際の値は入力されません。

はい、これはまだハックですが、私にとってはうまくいきます。YMMV。


Chrome 40では機能しないようです
フード

彼らはこのハックを拾い、値の制御文字を無視したので、空と評価されるようになったと思います。正しい最新のソリューションについては、@ ice-cream stackoverflow.com/a/16130452/752696の回答を参照してください。
spikyjt

ここでも同じ使用例:ユーザー管理を操作し、独自の資格情報を自動入力します。ただし、これは自分のコードであり、form新しいユーザーの作成と既存のユーザーの編集にを再利用するためinput、JSを介して値をオーバーライドするだけでオートコンプリートが削除されました。
nuala
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.