web-dev-qa-db-ja.com

「AutoComplete = Off」がGoogleで機能しないChromeブラウザ

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を置く以外のソリューションはありますか??

22
user2492270

これは、Chrome(ほぼすべてのChrome userwantsこの動作)。

この理由は、Googleが呼んでいるものです 選挙区の優先順位

  1. ユーザーは王様です!彼らが望むものは重要ですmost
  2. ユーザーがパスワードまたは自動入力マネージャーを使用したい。
  3. Webアプリケーションは、フォームの値を保存したくないと言っています。
  4. ユーザーの選択がより重要なので、フォームの値は保持されます。

回避策はありますが、将来的には修正される可能性が高いです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" />

私が言ったように、厄介です。

19
Keith

これはGoogle Chromeのバグである可能性があり、隠し入力を作成して不正行為を行うことはできません。オートコンプリート機能は、データを入力する最初の入力テキストを取得します。

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" style="display:none" />
    <input autocomplete="off" type="text" />
</form>
6
Bedonkey

これは、Google Chromeで再発する問題のようです。ただし、フォームにオートコンプリートを追加するとdidが機能します。たぶん新しいバージョンではそうではありません。

これはハックです。 入力にIDを与えます。たとえば、fooで、JavaScriptで:

if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) {
    setTimeout(function () {
        document.getElementById('foo').autocomplete = 'off';
    }, 1);
}

これがあなたのために働くかどうか確認してください。唯一の欠点は、Chromeandを使用している人がJavaScriptを無効にしている場合でも、フィールドがオートコンプリート。

2
federico-t

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ドキュメント でソリューションのリストを見つけることができます。

0
Praveen

これを試して、少しいじってから働いた

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 );
    });
}
0
Luke Snowden

AJAX呼び出しを使用してバックエンドにデータを送信する場合。 AJAX呼び出しを完了すると、パスワードフィールドがクリアされます。その後、パスワード保存プロンプトは表示されません。

例:$(#foo).val( "");

0
Sirikumara