HTML formunda otomatik tamamlamayı devre dışı bırakmanın geçerli bir W3C yolu var mı?


424

xhtml1-transitional.dtdDokümanı kullanırken , aşağıdaki HTML ile bir kredi kartı numarası toplamak

<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>

W3C doğrulayıcısında bir uyarı işaretleyecek:

"otomatik tamamlama" özelliği yoktur.

Bir formdaki hassas alanlarda tarayıcıyı otomatik olarak tamamlamayı devre dışı bırakmanın bir W3C / standartlar yolu var mı?


10
Kullanıcının otomatik tamamlama ayarıyla uğraşmanın yapmak istediğiniz şey olduğundan emin misiniz? Eğer açmışlarsa, muhtemelen beğenirler. Otomatik Tamamlama, kullanıcının yazı tipi boyutunu vb. Değiştirmesine izin veren düğme gibi tamamen tarayıcı tarafı bir özelliktir. İsteklerine müdahale etmemelisiniz
rmeador

113
Kredi kartı numarası kadar hassas bir şey için bile mi? Hatırlanmasını isteyecek çok fazla insan düşünemiyorum - özellikle de otomatik tamamlama çoğu tarayıcıda varsayılan olarak açık olduğundan. Kötü olduğunu hatırlamak istiyorlarsa, Google araç çubuğu gibi formları dolduran bir şey kullanabilirler.
matt b

13
Kullanım durumum biraz farklı - kendi otomatik tamamlamamı yapıyorum ve tarayıcınınla çatışmasını istemiyorum. Ben sadece autocomplete = "off" geçersiz olduğunu keşfettim, ama başka basit bir çözüm var gibi görünüyor (js ile enjekte etmek sadece aptalca)
thepeer

13
@rmeador çünkü bazen standart otomatik öneri kutusuna daha kullanıcı dostu bir alternatif sunmak istiyoruz. @ corydoras lütfen OSX ağırlığınızı zorlamayın, bu sorunun çözümü için yararlı değildir.
Josh

12
Sorun, hileli bir işlem gerçekleştiğinde bankaların tüccarı sorumlu tutmasıdır ... müşterinin hatası% 100 olsa bile. Bu nedenle, bazı durumlarda, müşteri için özelliği devre dışı bırakmak meşru olur.
Alexandre H.Tremblay

Yanıtlar:


421

İşte formu otomatik tamamlanması için sorunları (ve çözümleri) açıklar MDC iyi bir makale. Microsoft burada da benzer bir şey yayınladı .

Dürüst olmak gerekirse, bu kullanıcılarınız için önemli bir şeyse, standartları bu şekilde 'kırmak' uygun görünüyor. Örneğin, Amazon 'otomatik tamamlama' özelliğini biraz kullanıyor ve iyi çalışıyor gibi görünüyor.

Uyarıyı tamamen kaldırmak istiyorsanız, özelliği destekleyen tarayıcılara (IE ve Firefox önemli tarayıcılardır) özelliği uygulamak için JavaScript'i kullanabilirsiniz. someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );

Son olarak, siteniz HTTPS kullanıyorsa, IE otomatik tamamlamayı otomatik olarak kapatır (bildiğim kadarıyla diğer bazı tarayıcılarda olduğu gibi).

Güncelleme

Bu cevap hala birkaç upvotes aldığından, HTML5'te form öğenizdeki 'otomatik tamamlama' özelliğini kullanabileceğinizi belirtmek istedim. Bunun için W3C'deki belgelere bakın .


41
Firefox, https'de otomatik tamamlamayı kapatmıyor gibi görünüyor, ancak bu yararlı bir bilgi parçası. Teşekkürler!
matt b

3
Safari, autocomplete = "off" özelliğine saygı duymaz. Bkz. Stackoverflow.com/questions/22817801/…
Skurpi

1
autocompleteyalnızca formöğe üzerinde kullanılmayabilir ve offdeğer en azındanchromium-40.0.2214.115
x-yuri

W3c, HTML5.1'deki otomatik tamamlama standartlarını genişletiyor gibi görünüyor (bu yorumdan itibaren taslak olarak) w3c.github.io/html/…
Justin Nafe

1
Hiçbir şey işe yaramazsa, otomatik tamamlamayı kapatmak için metin kutusu yerine textarea kullanın.
Bsienn

64

W3C, (X) HTML4 ile çalışacak bir yol önerirse çok şaşırırdım. Otomatik tamamlama özelliği tamamen tarayıcı tabanlıdır ve son yıllarda tanıtıldı (HTML4 standardı yazıldıktan hemen sonra).

Yine de HTML5'in bir tane olsaydı şaşırmazdı.

Düzenleme: Düşündüğüm gibi, HTML5 bu özelliğe sahip . Sayfanızı HTML5 olarak tanımlamak için aşağıdaki dokümanı kullanın (yani: bunu kaynak kodunuzdaki ilk metin olarak yerleştirin). Hala taslak formda olduğu için tüm tarayıcıların bu standardı desteklemediğini unutmayın.

<!DOCTYPE html>

7
Tüm tarayıcılar eski Konqueror sürümlerinin bunu desteklemesini bekler. IE6 bile bunu destekliyor. Gitmek için bir öğretidir.
BalusC

56

HTML 4 : Hayır

HTML 5 : Evet

Otomatik tamamlama özelliği, numaralandırılmış bir özelliktir. Özelliğin iki durumu vardır. Üzerine durumuna anahtar kelime haritalar ve kapalı kapalı durumuna kelime haritalar. Özellik de atlanabilir. Eksik değer varsayılan değeri açık durumudur. Kapalı devlet varsayılan olarak, formda form denetimleri için kendi otomatik doldurma alan adı ayarlanmamış belirtir kapalı ; açık durumu, varsayılan olarak formdaki form denetimlerinin autofillalan adının "açık" olarak ayarlanacağını belirtir .

Referans: W3


@ freestock.tk Evet, diğerlerinden daha net. Sadelik önemlidir.
OverCoder

32

Hayır, ancak otomatik tarayıcı tamamlama nameözelliği daha önce doldurulmuş alanlarla aynı özniteliğe sahip alan tarafından tetiklenir . Rastgele bir alan adına sahip olmak için akıllı bir yol oluşturabilirseniz , otomatik tamamlama alan için önceden girilmiş herhangi bir değeri alamaz.

Bir giriş alanına " email_<?= randomNumber() ?>" gibi bir ad verirseniz ve bu veri döngüsünü POST veya GET değişkenleri aracılığıyla " email_[some number]" deseniyle eşleşen bir şey arayan bir komut dosyasına sahip olsaydınız, bunu çekebilirdiniz ve bu ( pratik) garantili başarı, tarayıcıdan bağımsız olarak .


6
Bu otomatik testi zorlaştırır.
David Waters

14
Otomatik test daha zor olur, ancak test yazılımınız rasgele bir sayı eklenmiş alanları kontrol edip okuyamazsa. Otomatik test yazılımınızı yükseltme zamanı gelmiş olabilir.
corydoras

8
Otomatik tamamlama bilgileri yine de tarayıcının veri dizinine kaydedilir, değil mi?
Joey Adams

2
Tahminen. Ancak aslında kullanıcıya tekrar görünmesi beklenmez.
Phantom Watson

1
Chrome artık belirli bir sitenin ad özelliği yerine type = "password" özelliğini kullanıyor. Ben name = "newpassword" autocomplete = 'kapalı' type = "şifre" var ve otomatik olarak doldurulur! Türü değiştirirsem, otomatik doldurma yok
Enigma Plus

31

Hayır, Mozila Wiki'de iyi bir makale var .

Geçersiz olanı kullanmaya devam edeceğim attribute. Bence bu, pragmatizmin geçerliliği kazanmak için kazanması gereken yer.


23

JavaScript ile ayarlamaya ne dersiniz?

var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false

Mükemmel değil, ancak HTML'niz geçerli olacak.


8
Javascript'i doğrulama hatalarına geçici bir çözüm olarak kullanmak halının altındaki tozu süpürmek gibidir. HTML belgesi geçerli olabilir, ancak elde edilen HTML + JS sayfası geçerli olmaz.
fregante


11

JQuery kullanıyorsanız, böyle bir şey yapabilirsiniz:

$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});

ve istediğiniz yerde autocompleteOff sınıfını kullanın:

<input type="text" name="fieldName" id="fieldId" class="firstCSSClass otherCSSClass autocompleteOff" />

TÜM girdilerinizin olmasını autocomplete=offistiyorsanız, bunu kullanabilirsiniz:

$(document).ready(function(){$("input").attr("autocomplete","off");});

4
Sadece HTML5 doküman türünü kullanmak daha kolay ve daha iyidir.
BalusC

5
Bu gerçekten geçerli bir html değil, sadece html'den autocompletefarklı bir şekilde (geçersiz) özelliğini ayarlıyor
matt b

Bu kod benim için çalışmıyor; $('input.autocompleteOff').val('');Tamam gibi görünüyor kullandım .
dqd

5
Javascript'i doğrulama hatalarına geçici bir çözüm olarak kullanmak halının altındaki tozu süpürmek gibidir. HTML belgesi geçerli olabilir, ancak elde edilen HTML + JS sayfası geçerli olmaz.
fregante

8

Güvenlik konusunda da yardımcı olacak başka bir yol da, giriş kutusunu her görüntülediğinizde farklı bir şey çağırmaktır: tıpkı bir captha gibi. Bu şekilde, oturum tek seferlik girdiyi okuyabilir ve Otomatik Tamamlama'nın devam edecek bir şeyi yoktur.

Rmeador'un tarayıcı deneyimine müdahale edip etmemeniz gerektiği sorusuyla ilgili bir nokta: İletişim Yönetimi ve CRM sistemlerini geliştiriyoruz ve başkalarının verilerini bir forma yazarken, sürekli olarak kendi ayrıntılarınızı önermek istemiyorsunuz.

Bu bizim ihtiyaçlarımız için çalışıyor, ancak daha sonra kullanıcılara iyi bir tarayıcı almasını söyleme lüksüne sahibiz :)

autocomplete='off' 

8

autocomplete="off" bu, tüm modern tarayıcılar için sorunu çözmelidir.

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

Gecko tarayıcılarının mevcut sürümlerinde, otomatik tamamlama özelliği mükemmel çalışır. Önceki sürümlerde, Netscape 6.2'ye geri dönersek, "Adres" ve "Ad" içeren formlar hariç

Güncelleme

Bazı durumlarda, otomatik tamamlama özelliği kapalı olsa bile tarayıcı otomatik tamamlama değerleri önerir. Bu beklenmedik davranış, geliştiriciler için oldukça şaşırtıcı olabilir. Otomatik tamamlamayı gerçekten zorlamanın hilesi , özelliğe rastgele bir dize atamaktır , örneğin:

autocomplete="nope"

Bu rastgele değer a olmadığından valid onetarayıcı pes eder.

dökümantasyon


Modern tarayıcılar, otomatik tamamlama = kapalı seçimine saygı duymaz. :/ Ne yazık ki.
Alexus

@Alexus bazı güncelleme ekledi ... internet değişikliği çok hızlı
Emilio Gort

6

Rastgele bir 'ad' özelliği kullanmak benim için işe yarıyor.

Formu gönderirken ad özniteliğini, form gönderildiğinde yine de ada göre erişebilmeniz için sıfırlarım. (adı depolamak için id özelliğini kullanarak)


5

Otomatik tamamlama özelliğinin konumu hakkında biraz karışıklık olduğunu unutmayın. Tüm FORM etiketine veya ayrı INPUT etiketlerine uygulanabilir ve bu HTML5'ten önce gerçekten standartlaştırılmamıştır ( her iki konuma da açıkça izin verir ). Eski belgelerde en önemlisi bu Mozilla makalesinde yalnızca FORM etiketinden bahsedilmektedir. Aynı zamanda bazı güvenlik tarayıcıları sadece GİRİŞ etiketi otomatik tamamlanması için bakmak ve o eksik ise (o bile şikayet edecek olan ebeveyn FORMUNU). Bu karışıklığın daha ayrıntılı bir analizi burada yayınlanmıştır: AUTOCOMPLETE = HTML formlarındaki OFF öznitelikleri üzerindeki karışıklık .


3

İdeal değil, ancak her oluşturduğunuzda metin kutusunun kimliğini ve adını değiştirebilirsiniz - verileri elde edebilmek için sunucu tarafını da izlemeniz gerekir.

Bunun işe yarayıp yaramayacağından emin değilim, sadece bir düşünceydi.


2

Bence daha basit bir yol var. Rasgele bir adla (javascript aracılığıyla) gizli bir giriş oluşturun ve kullanıcı adını buna ayarlayın. Şifre ile tekrarlayın. Bu şekilde, arka uç komut dosyanız, otomatik tamamlamayı karanlıkta tutarken uygun alan adının tam olarak ne olduğunu bilir.

Muhtemelen yanılıyorum, ama bu sadece bir fikir.


2
if (document.getElementsByTagName) {
    var inputElements = document.getElementsByTagName("input");
    for (i=0; inputElements[i]; i++) {
        if (inputElements[i].className && (inputElements[i].className.indexOf("disableAutoComplete") != -1)) {
            inputElements[i].setAttribute("autocomplete","off");
        }
    }
}

-1

Bu çözüm benimle çalışıyor:

$('form,input,select,textarea').attr("autocomplete", "nope");

bu bölgede otomatik doldurmayı kullanmak istiyorsanız: add autocomplete="false"in element ex:

<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">

-5

Geçerli otomatik tamamlama kapalı

<script type="text/javascript">
    /* <![CDATA[ */
    document.write('<input type="text" id="cardNumber" name="cardNumber" autocom'+'plete="off"/>');
    /* ]]> */ 
</script>

13
Bir kullanıcının JS kapatmış olsaydı, kart numarasını giremediği için bir siparişi tamamlayamıyor mu? JS ile özniteliği tamamlamak daha iyi - en kötü durumda, JS kapalı kart numarası alanını otomatik tamamlama potansiyeli ile verir, ama en azından bir sipariş verebilirler ... sadece bir düşünce :)
Terry_Brown

3
Bu hiç komik değil.
Ricardo Pieper
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.