Google Chrome form otomatik doldurma ve sarı arka planı


245

Google Chrome ve form otomatik doldurma işleviyle ilgili tasarım sorunum var. Chrome bazı girişleri / şifreleri hatırlarsa arka plan rengini sarıya değiştirir.

İşte bazı ekran görüntüleri:

alternatif metin alternatif metin

Bu arka planı nasıl kaldırırım veya yalnızca bu otomatik doldurmayı devre dışı bırakabilirsiniz?


4
Bunun bir cevabı olup olmadığını da görmek isterim.
Kyle

12
Stil vermek için bu renk, Chrome'daki giriş etiketlerindeki anahatlar gibi tasarım öğeleriyle ciddi şekilde olabilir, rengi kapatmaktan çok değiştirmek istiyorum.
Kyle

3
Google bu sorunu bir dereceye kadar kabul ediyor gibi görünüyor. Bkz code.google.com/p/chromium/issues/detail?id=46543
MitMaro

1
Otomatik tamamlamayı devre dışı bırakmak için giriş
öğenize

1
Sadece ek bir bilgi: Bir şifre alanım olduğunda bunu ısırdım. Alanlarımı otomatik olarak vurguladım (sarı) ve garip bir değerle doldurdum. Ve çözümü burada buldum: zigpress.com/2014/11/22/stop-chrome-messing-forms ... Çözüm "Google Chrome Otomatik Doldurmayı Devre Dışı Bırak" yazan bölümde ... gizli alanlar ekleyin.
Cokorda Raka

Yanıtlar:


282

"Beyaz" ı istediğiniz renge değiştirin.

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

4
iyi fikir. Zayıf cihazlarda potansiyel performans vuruşlarından kaçınmak için yeterli olduğunda (normal boyutta giriş kutuları) 50 veya 100 ile yapışırdım. (Ve 0'dan sonra piksele gerek yok)
Frank Nocke

4
Bu hack seviyorum! Harika bir düşünce ... Herkes otomatik doldurmayı kaldırıyor. Otomatik doldurmaya devam etmek istedim, çirkin sarıdan binmek istedim.
Travis

1
Giriş alanınızın arkasında arka plan resimleri varsa, tüm alanı beyazla doldurun. Ben jquery tabanlı olanlar da dahil olmak üzere bu sayfadaki tüm çözümleri denedim ve onlar benim için işe yaramadı, sonunda alana autocomplete = "off" eklemek zorunda kaldı.
Myke Black

19
Metin rengi kullanımını da stilize etmek için -webkit-text-fill-color- bu soruya
Erwin Wessels

2
hata var, belki sözdizimi değişti dont ama bu şimdi çalışıyor:box-shadow: inset 0 0 0 1000px white !important;
Muhammed Umer

49

Saydam giriş alanları istiyorsanız geçiş ve geçiş gecikmesini kullanabilirsiniz.

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 renk değerleri olarak benim için en iyi çözüm işe yaramadı -webkit-box-shadow. Ayrıca bu bildirim için renk değerleri verme ihtiyacını ortadan kaldırır: varsayılan değerler yine de geçerlidir.
Sébastien

daha da iyisi, renk karışımı hiç olmamak için süresi yerine geçiş gecikmesini kullanmaktır
antoine129

iyi ama bazı nedenlerden dolayı dosyanın sonunda bu kuralı taşımak zorunda kaldım, aksi takdirde işe yaramadı
Igor Mizak

Aradığım şey! Teşekkür ederim!
Akhmedzianov Danilian

43

Burada çözüm :

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);
        });
    });
}

Bu işe yaradı, üstteki cevap ise işe yaramadı. Ancak sanırım o zamandan beri davranışı değiştirmeyeceğim). bu javascript yani çalışır arasında bir saniye var ve (js yüklenene kadar) ve b). varsayılan davranışa alışkın olan krom kullanıcısının kafasını karıştırabilir.
TK123

3
Kromum sarı rengi yeni girişe yeniden uyguluyor :(
Dustin Silk

Lütfen yapma. Bu, yalnızca statik web siteleri için herhangi bir JS çerçevesi ile çalışmaz.
Akhmedzianov Danilian

26

Firefox'ta, formdaki tüm otomatik tamamlamayı autocomplete = "off / on" özelliğini kullanarak devre dışı bırakabilirsiniz. Benzer şekilde, otomatik tamamlama öğelerinin her biri aynı özellik kullanılarak ayarlanabilir.

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

Bunu çalışması gerektiği için Chrome'da test edebilirsiniz.


7
Tornalama autocomplete="off"bugünlerde erişilebilir değil.
João

4
Ne yazık ki, bu çözüm artık Chrome'da çalışmıyor.
henrywright

1
Burada gerçek sorunu gerçekten çözmediğiniz için bu son derece tavsiye edilmez. bunun yerine, kullanıcıları hayal kırıklığına uğratarak yeni bir tane oluşturuyorsunuz çünkü (muhtemelen) giriş bilgilerini (muhtemelen ne olduklarını hatırlıyorlarsa) manuel olarak yazmak zorundalar
xorinzor

25

Otomatik doldurmanın yanı sıra, giriş öğelerinize eklenen tüm verileri, ekli işleyicileri ve işlevleri korumak istiyorsanız, şu komut dosyasını deneyin:

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);
}

Otomatik doldurma öğelerini bulana kadar yoklar, veri ve olaylar da dahil olmak üzere bunları klonlar, sonra bunları aynı konuma DOM içine ekler ve orijinali kaldırır. Otomatik doldurma bazen sayfa yüklendikten sonra bir saniye sürdüğünden, klonlanacak herhangi bir şey bulduğunda yoklamayı durdurur. Bu, önceki bir kod örneğinin bir varyasyonudur, ancak daha sağlamdır ve işlevselliği olabildiğince sağlam tutar.

(Chrome, Firefox ve IE 8'de çalıştığı onaylandı.)


6
Otomatik tamamlamayı devre dışı bırakmadan, bulduğum tek çözüm buydu.
Xeroxoid

window.load üzerinde krom otomatik doldurmaları nedeniyle aralıkların ayarlanması gerekli olmayabilir.
Timo Huovinen

2
Otomatik tamamlamayı kaldırmadan çalışır, milyonlarca oyu olanlardan çok daha iyi bir çözümdür.
Ally

Diğer çözümler benim için işe yaramadı, en çok onaylanmış olanı bile, ama bu işe yaradı. @Timo'nun yukarıda söylediklerinin tersi olan sorun, Chrome'un window.load'da otomatik olarak doldurmamasıdır. Bu işe yaramış olsa da, bununla ilgili bir sorun, -webkit-otomatik doldurma öğeleri yoksa, döngünün sürekli çalışmasıdır. Bunun çalışması için bir aralığa bile ihtiyacınız yok. Sadece 50 milisaniyelik bir gecikmeyle bir zaman aşımı ayarlayın ve iyi çalışır.
Gavin

16

Aşağıdaki CSS sarı arka plan rengini kaldırır ve seçtiğiniz bir arka plan rengiyle değiştirir. Otomatik doldurmayı devre dışı bırakmaz ve jQuery veya Javascript kesmek gerektirmez.

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;
}

Kopyalanan çözüm: HTML / CSS ile tarayıcı form doldurmayı ve giriş vurgulamayı geçersiz kıl


Alanda birden fazla gölge varsa iyi oynatılmaz.
Yetkinliğim

6

Benim için çalıştı, sadece css değişikliği gerekli.

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

#ffffff yerine herhangi bir renk koyabilirsiniz .


3

Biraz hacky ama benim için mükemmel çalışıyor

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

3

Cevapların bir kombinasyonu benim için çalıştı

<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>

Chrome Sürüm 53.0.2785.116 m
pleshy

2

İşte Jason'ın MooTools versiyonu. Safari'de de düzeltir.

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
Bu komut dosyasını kullanmayın. Otomatik olarak doldurulmuş eleman yoksa, döngü sürekli olarak 20 milisaniyede çalışır. Bir aralık gerekli değildir. Pencereden sonra bir zaman aşımı ayarlayın. Yaklaşık 50 milisaniyede yükleyin ve stilin kaldırılması çok zaman alacaktır.
Gavin

2

Bu, hem Safari'de hem de Chrome'da sorunu giderir

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);
}

Benim için işe yarıyor. Ama HATA hala orada ve görüldüğü gibi, sabit bir tarih yok. code.google.com/p/chromium/issues/detail?id=46543#c22
Eduardo M

Aralığınızı asla temizlemezsiniz. Bu özensiz kod, kullanma.
Gavin

1
Aslında bu işe yaramıyor. Sürekli klonlandıkları için girdilere hiçbir şey yazamıyorum. neredeyse orada ...
Dustin Silk

bu var id = window.setInterval (function () {$ ('input: -webkit-autofill'). her biri (function () {var clone = $ (this) .clone (true, true); $ (this) . sonra (klon) .çıkar ();});}, 20); $ ( 'input: -webkit-otomatik doldurma'). odağı (function () {window.clearInterval (id);});
Dustin Silk

2

Bu sadece CSS versiyonu bana yardımcı oldu.

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

nerede beyaz istediğiniz herhangi bir renk olabilir.


2

Bunu kullanıyorum,

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

Etiketinize, bu küçük kod satırını eklemeniz yeterlidir.

autocomplete="off"

Bununla birlikte, bunu kullanıcı adı / e-posta / kimlik adı alanına yerleştirmeyin, çünkü otomatik tamamlamayı kullanmak istiyorsanız, bu alan için devre dışı bırakacaktır. Ancak bunun bir yolunu buldum, sadece şifreyi otomatik olarak tamamlamadığınız için kodu şifre giriş etiketinize yerleştirin. Bu düzeltme, e-posta / kullanıcı adı alanınızdaki renk kuvvetini, matinain otomatik tamamlama özelliğini kaldırmalı ve Jquery veya javascript gibi hantal saldırıları önlemenizi sağlar.


1

Ondan tamamen kurtulmak istiyorsanız, önceki cevaplardaki kodu ayarladım, böylece hover, aktif ve odakta çalışıyor:

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
a eklemek !importantgerekli ama teşekkürler, bana çok yardımcı oldu.
Polochon

0

İşte Alessandro ile aynı şeyi yapan bir Mootools çözümü - etkilenen her girişi yenisiyle değiştirir.

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

Peki ya bu çözüm:

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

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

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

Otomatik tamamlama ve otomatik doldurmayı kapatır (böylece sarı arka planlar kaybolur), 100 milisaniye bekler ve ardından otomatik tamamlama işlevini otomatik doldurma olmadan geri döndürür.

Otomatik doldurulması gereken girdileriniz varsa, onlara auto-complete-oncss sınıfı verin .


0

Çözümlerin hiçbiri benim için işe yaramadı, kullanıcı adı ve şifre girişleri hala dolduruluyordu ve sarı arka plan verildi.

Bu yüzden kendime, "Chrome belirli bir sayfada neyin otomatik olarak doldurulması gerektiğini nasıl belirler?" Diye sordum.

"Giriş kimlikleri mi, giriş adları mı görünüyor? Form kimlikleri mi? Form eylemi?"

Kullanıcı adı ve şifre girişleriyle yaptığım deneyler sayesinde, Chrome'un otomatik olarak doldurulması gereken alanları bulamamasına neden olacak iki yol vardı:

1) Şifre girişini metin girişinin önüne koyun. 2) Onlara aynı isim ve kimliği verin ... veya isim ve kimlik vermeyin.

Sayfa yüklendikten sonra, javascript ile sayfadaki girişlerin sırasını değiştirebilir veya dinamik olarak adlarını ve kimliklerini verebilirsiniz ...

Chrome neyin vurduğunu bilmiyor ... otomatik tamamlama kapalı kalıyor.

Çılgın kesmek, biliyorum. Ama benim için çalışıyor.

Krom 34.0.1847.116, OSX 10.7.5


0

Benim için çalışmanın tek yolu şuydu: (jQuery gerekli)

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

0

Ben böyle bir şifre alanı için bu sorunu çözdü:

Giriş türünü şifre yerine metne ayarlayın

JQuery ile giriş metni değerini kaldırın

Giriş türünü jQuery ile parolaya dönüştürün

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

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

Chrome'da çalışmıyor. Alan type = password olur olmaz, Chrome onu doldurur
mowgli

0

Arjans çözümü için bir güncelleme. Değerleri değiştirmeye çalışırken size izin vermez. Bu benim için iyi çalışıyor. Bir girişe odaklandığınızda sarıya döner. yeterince yakın.

$(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

Bu kodu deneyin:

 	$(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

ücretli namrouti yanıtı doğrudur. Ancak giriş seçildiğinde arka plan hala sarı olur . Ekleme !importantsorunu düzeltin. İsterseniz textareave selectaynı davranışla sadece ekleyintextarea:-webkit-autofill, select:-webkit-autofill

Sadece giriş

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

girdi, seçme, metin

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

0

Eklemek autocomplete="off"kesmeyecek.

Giriş türü özelliğini olarak değiştirin type="search".
Google, bir tür arama içeren girişlere otomatik doldurma uygulamaz.

Umarım bu size biraz zaman kazandırır.


0

Css uygulanana kadar sarı titreşimden kaçınmak istiyorsanız, o kötü çocuk üzerinde bir geçiş yapın:

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

-1

Son çözüm:

$(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

Kendimi aynı soruyla buldum. Bu benim için çalışıyor:

form :focus {
  outline: none;
}

3
Bu, tıkladığınızda kutudaki anahattır, otomatik olarak doldurulmuş girişin arka plan rengini değil
Claire
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.