Google Chromeフォームの自動入力とその黄色の背景


245

Google Chromeとそのフォームの自動入力機能のデザインに問題があります。Chromeがログイン/パスワードを覚えている場合、背景色を黄色に変更します。

ここにいくつかのスクリーンショットがあります:

代替テキスト 代替テキスト

その背景を削除する方法、またはこの自動入力を無効にする方法は?


4
これに対する答えがあるかどうかも知りたいです。
カイル

12
スタイリングについては、この色はChromeの入力タグのアウトラインのように、デザイン要素に真剣に取り組むことができます。色をオフにするよりも変更したいです。
カイル

3
Googleはこの問題をある程度認めているようです。code.google.com/p/chromium/issues/detail?id=46543を
MitMaro

1
オートコンプリートを無効にするには、入力要素にautocomplete = "off"を追加します。例:<input type = "text" id = "input" autocomplete = "off">
joe_young

1
ただ追加情報:パスワードフィールドがあると、私はこれに噛まれました。フィールドを自動的にハイライト(黄色)し、奇妙な値を入力しました。そして私はここに解決策を見つけました:zigpress.com/2014/11/22/stop-chrome-messing-forms ...解決策は「Google Chromeの自動入力を無効にする」というセクションにあります...非表示フィールドを追加します。
Cokorda Raka 2015

回答:


282

「白」を任意の色に変更します。

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
}

4
いい案。十分な(通常のサイズの入力ボックス)の場合は常に、50または100を使用して、弱いデバイスでパフォーマンスが低下する可能性を回避します。(0の後にpxは必要ありません)
フランクノッケ2014年

4
このハックが大好きです!すばらしい考え...誰もが自動入力を削除しています。醜い黄色の乗り物に乗るだけで自動入力を維持したかったのです。
Travis

1
入力フィールドの背後に背景画像がある場合は機能しません。領域全体を白で埋めるだけです。このページのjqueryベースのソリューションを含むすべてのソリューションを試したところ、うまくいきませんでした。結局、フィールドにautocomplete = "off"を追加する必要がありました。
Myke Black 2014

19
テキストの色の使用もスタイル設定するには、この質問を-webkit-text-fill-color参照してください
Erwin Wessels '

2
エラーがあります。構文は変更されていないかもしれませんが、これで動作します:box-shadow: inset 0 0 0 1000px white !important;
Muhammad Umer

49

透過的な入力フィールドが必要な場合は、遷移と遷移遅延を使用できます。

input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-transition-delay: 9999s;
    -webkit-transition: color 9999s ease-out, background-color 9999s ease-out;
}

RGBAカラー値がで機能しなかったので、私にとって最良の解決策-webkit-box-shadow。また、この宣言にカラー値を指定する必要がなくなります。デフォルト値が適用されます。
セバスチャン2016年

さらに良いのは、持続時間の代わりに遷移遅延を使用して、色の混合をまったく行わないことです
antoine129

良いですが、何らかの理由でファイルの最後にこのルールを移動する必要がありましたが、それ以外の場合は機能しませんでした
Igor Mizak

私が探していたもの!ありがとうございました!
Akhmedzianov Danilian 2018

43

ここでの解決策:

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0) {
    $(window).load(function(){
        $('input:-webkit-autofill').each(function(){
            var text = $(this).val();
            var name = $(this).attr('name');
            $(this).after(this.outerHTML).remove();
            $('input[name=' + name + ']').val(text);
        });
    });
}

これは機能しましたが、トップの回答は機能しませんでした。しかし、私はa)以降、振る舞いを変えようとはしません。これはjavascriptであるため、動作し、動作しません(jsがロードされるまで)とb)の間には1秒があります。デフォルトの動作に慣れているChromeユーザーを混乱させる可能性があります。
TK123 2013年

3
私のクロムは新しい入力に黄色を再適用します:(
Dustin Silk

しないでください。これはJSフレームワークでは機能せず、静的なWebサイトでのみ機能します。
Akhmedzianov Danilian 2018

26

Firefoxでは、autocomplete = "off / on"属性を使用して、フォームのすべてのオートコンプリートを無効にすることができます。同様に、個々のアイテムのオートコンプリートは、同じ属性を使用して設定できます。

<form autocomplete="off" method=".." action="..">  
<input type="text" name="textboxname" autocomplete="off">

正常に機能するように、これをChromeでテストできます。


7
autocomplete="off"最近はターニングにアクセスできません。
ジョアン

4
残念ながら、このソリューションはChromeでは機能しなくなりました。
henrywright 2014

1
ここでは実際の問題を実際に解決していないため、これは非常にお勧めしません。代わりに、ユーザーは(おそらく)ログインの詳細を手動で入力する必要があるため、ユーザーを苛立たせて新しいものを作成します(彼らが何であったかさえ覚えていれば)
xorinzor

25

自動入力だけでなく、データ、アタッチされたハンドラー、入力要素にアタッチされた機能も保持したい場合は、次のスクリプトを試してください。

if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
{
    var _interval = window.setInterval(function ()
    {
        var autofills = $('input:-webkit-autofill');
        if (autofills.length > 0)
        {
            window.clearInterval(_interval); // stop polling
            autofills.each(function()
            {
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }
    }, 20);
}

自動入力要素が見つかるまでポーリングし、データとイベントを含めてそれらを複製し、同じ場所のDOMに挿入して元の要素を削除します。自動読み込みではページの読み込み後に2秒かかることがあるので、複製するものが見つかるとポーリングを停止します。これは、前のコードサンプルのバリエーションですが、より堅牢であり、可能な限り多くの機能をそのまま維持します。

(Chrome、Firefox、IE 8で動作することが確認されています。)


6
これは、オートコンプリートを無効にすることなく、私が機能している唯一のソリューションでした。
Xeroxoid '19

おそらくwindow.loadでクロムが自動入力するため、間隔を設定する必要はありませんか?
Timo Huovinen、

2
オートコンプリートを削除せずに機能し、数百万の賛成票を持つソリューションよりもはるかに優れたソリューションです。
アリー

他の解決策は私にとってはうまくいきませんでした。上記の@Timoの発言と反対の問題は、Chromeがwindow.loadで自動入力されないことです。これが機能したとしても、-webkit-autofill要素がない場合、ループが継続的に実行されるという問題があります。これが機能するための間隔さえ必要ありません。おそらく50ミリ秒の遅延でタイムアウトを設定するだけで問題なく動作します。
Gavin

16

次のCSSは、黄色の背景色を削除し、選択した背景色に置き換えます。自動入力は無効にならず、jQueryやJavascriptのハックは必要ありません。

input:-webkit-autofill {
    -webkit-box-shadow:0 0 0 50px white inset; /* Change the color to your own background color */
    -webkit-text-fill-color: #333;
}
input:-webkit-autofill:focus {
    -webkit-box-shadow: /*your box-shadow*/,0 0 0 50px white inset;
    -webkit-text-fill-color: #333;
}

コピー元: HTML / CSSによるブラウザーのフォーム入力と入力の強調表示のオーバーライド


フィールドに複数のシャドウが適用されている場合、うまく再生されません。
私の能力を伸ばす

6

私のために働いた、cssの変更のみが必要です。

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px #ffffff inset!important;
}

#ffffffの代わりに任意の色を使用できます。


3

少しハッキーですが、私にとっては完璧に機能します

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
}

3

答えの組み合わせは私のために働きました

<style>
    input:-webkit-autofill,
    input:-webkit-autofill:hover,
    input:-webkit-autofill:focus,
    input:-webkit-autofill:active {
        -webkit-box-shadow: 0 0 0px 1000px #373e4a inset !important;
           -webkit-text-fill-color: white !important;
   }
</style>

これはクロームバージョン53.0.2785.116メートルの両方のテキストと背景との私のために働いた唯一の例である
pleshy

2

これがJasonのMooToolsバージョンです。Safariでも修正されています。

window.addEvent('domready',function() { 
    $('username').focus();

    if ((navigator.userAgent.toLowerCase().indexOf(\"chrome\") >= 0)||(navigator.userAgent.toLowerCase().indexOf(\"safari\") >= 0))
    {

        var _interval = window.setInterval(function ()
        {
            var autofills = $$('input:-webkit-autofill');
            if (autofills.length > 0)
            {

                window.clearInterval(_interval); // stop polling
                autofills.each(function(el)
                {
                    var clone = el.clone(true,true).inject(el,'after');;
                    el.dispose();
                });
            }
        }, 20);                                               


    }
});

1
このスクリプトは使用しないでください。自動入力された要素がない場合、ループは継続的に20ミリ秒で実行されます。間隔は不要です。window.load後のタイムアウトを約50ミリ秒に設定すると、スタイリングを削除するのに十分な時間がかかります。
Gavin

2

これにより、SafariとChromeの両方の問題が修正されます

if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
window.setInterval(function(){
    $('input:-webkit-autofill').each(function(){
        var clone = $(this).clone(true, true);
        $(this).after(clone).remove();
    });
}, 20);
}

私にとってはうまくいきます。しかし、BUGはまだそこにあり、ご覧のとおり、修正すべき日付はありません。code.google.com/p/chromium/issues/detail?id=46543#c22
エドゥアルドM

あなたはあなたの間隔をクリアすることはありません。これはずさんなコードですので使用しないでください。
Gavin

1
実際にはこれは機能しません。入力は常に複製されているため、入力には何も入力できません。ほとんどそこに...
ダスティンシルク

これを試してくださいvar id = window.setInterval(function(){$( 'input:-webkit-autofill')。each(function(){var clone = $(this).clone(true、true); $(this) .after(clone).remove();});}、20); $( 'input:-webkit-autofill')。focus(function(){window.clearInterval(id);});
ダスティンシルク

2

これは、CSSのみのバージョンに役立ちました。

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset; }

ここで、は任意の色にすることができます。


2

私はこれを使います

input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
input:focus:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important; }
/* You can use color:#color to change the color */

1

タグに、この小さなコード行を挿入するだけです。

autocomplete="off"

ただし、これをユーザー名/メール/ ID名フィールドに配置しないでください。オートコンプリートの使用を検討している場合、このフィールドでは無効になります。しかし、これを回避する方法を見つけました。パスワードをオートコンプリートすることは決してないので、コードをパスワード入力タグに配置するだけです。この修正により、カラーフォース、メール/ユーザー名フィールドのマチナオートコンプリート機能が削除され、Jqueryやjavascriptなどのかさばるハックを回避できるようになります。


1

それを完全に取り除きたい場合は、以前の回答のコードを調整して、ホバー、アクティブ、フォーカスでも機能するようにしました。

input:-webkit-autofill, input:-webkit-autofill:hover, input:-webkit-autofill:active, input:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 1000px white inset;
}

1
追加する!important必要がありますが、おかげで、それは私をたくさん助けてくれました。
ポロション2015年

0

これは、Alessandroと同じことを行うMootoolsソリューションです。影響を受ける各入力を新しい入力に置き換えます。

if (Browser.chrome) {
    $$('input:-webkit-autofill').each(function(item) {
        var text = item.value;
        var name = item.get('name');
        var newEl = new Element('input');
        newEl.set('name', name);
        newEl.value = text;
        newEl.replaces(item);
    });
}

0

その解決策はどうですか:

if ($.browser.webkit) {
    $(function() {
        var inputs = $('input:not(.auto-complete-on)');

        inputs.attr('autocomplete', 'off');

        setTimeout(function() {
            inputs.attr('autocomplete', 'on');
        }, 100);
    });
}

オートコンプリートとオートフィルをオフにし(黄色の背景が消える)、100ミリ秒待ってから、オートフィルなしでオートコンプリート機能を元に戻します。

自動入力が必要な入力がある場合は、auto-complete-onCSSクラスを指定します。


0

解決策はどれも私にとってうまくいきませんでした、ユーザー名とパスワードの入力はまだ入力されていて、黄色の背景が与えられていました。

それで、「Chromeは特定のページで自動入力するものをどのように決定するのですか?」

「入力ID、入力名を探しますか?フォームID?フォームアクション?」

ユーザー名とパスワードの入力を試してみたところ、自動入力する必要のあるフィールドをChromeが見つけられない原因は2つしかありませんでした。

1)パスワード入力をテキスト入力の前に置きます。2)それらに同じ名前とIDを付けます...または名前とIDを付けません。

ページが読み込まれた後、JavaScriptを使用して、ページ上の入力の順序を変更するか、動的に名前とIDを与えることができます...

そして、Chromeは何が問題かを認識していません...オートコンプリートはオフのままです。

クレイジーなハックだと思います。しかし、それは私のために働いています。

Chrome 34.0.1847.116、OSX 10.7.5


0

私のために働く唯一の方法は:(jQueryが必要です)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});

0

私はこのようなパスワードフィールドのこの問題を修正しました:

入力タイプをパスワードではなくテキストに設定します

jQueryを使用して入力テキスト値を削除する

jQueryを使用して入力タイプをパスワードに変換する

<input type="text" class="remove-autofill">

$('.js-remove-autofill').val('');    
$('.js-remove-autofill').attr('type', 'password');

Chromeでは機能しません。フィールドがtype = passwordになるとすぐに、Chromeで入力されます
mowgli

0

Arjansソリューションの更新。値を変更しようとすると、許可されません。これは私にとってはうまくいきます。入力に焦点を合わせると、黄色になります。その十分に近い。

$(document).ready(function (){
    if(navigator.userAgent.toLowerCase().indexOf("chrome") >= 0 || navigator.userAgent.toLowerCase().indexOf("safari") >= 0){
        var id = window.setInterval(function(){
            $('input:-webkit-autofill').each(function(){
                var clone = $(this).clone(true, true);
                $(this).after(clone).remove();
            });
        }, 20);

        $('input:-webkit-autofill').focus(function(){window.clearInterval(id);});
    }
});

$('input:-webkit-autofill').focus(function(){window.clearInterval(id);});

0

このコードを試してください:

 	$(function(){
   		setTimeout(function(){
   			$('[name=user_password]').attr('type', 'password');
   		}, 1000);
   	});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<input name="user_password" type="password">


0

ナムルティの正解は正解です。しかし、入力が選択されると、背景はまだ黄色になります。追加し!importantて問題を修正します。あなたもしたい場合textareaselect同じ動作でちょうど追加textarea:-webkit-autofill, select:-webkit-autofill

入力のみ

input:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

入力、選択、テキストエリア

input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill {
    background-color: rgb(250, 255, 189) !important;
}

0

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

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

これにより時間を節約できることを願っています。


0

CSSが適用されるまで黄色のちらつきを回避したい場合は、次のようにその不良少年に遷移を平手打ちします。

input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0 1000px white inset !important;
    transition: background-color 10s ease-in-out 0s;
}

-1

最終的な解決策:

$(document).ready(function(){
    var contadorInterval = 0;
    if (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0)
    {
        var _interval = window.setInterval(function ()
        {
            var autofills = $('input:-webkit-autofill');
            if (autofills.length > 0)
            {
                window.clearInterval(_interval); // stop polling
                autofills.each(function()
                {
                    var clone = $(this).clone(true, true);
                    $(this).after(clone).remove();
                    setTimeout(function(){
//                        $("#User").val('');
                        $("#Password").val('');
                    },10);
                });
            }
            contadorInterval++;
            if(contadorInterval > 50) window.clearInterval(_interval); // stop polling
        }, 20);
    }else{
        setTimeout(function(){
//            $("#User").val('');
            $("#Password").val('');
        },100);
    }
});


-5

同じ質問で自分自身を見つけた。これは私にとってはうまくいきます:

form :focus {
  outline: none;
}

3
それをクリックしたときのボックスの輪郭であり、自動入力された入力の背景色ではありません
Claire
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.