Partiye biraz geç kaldım, ama nasıl autocomplete
çalışmalı ve çalışmama konusunda biraz yanlış anlaşılma var gibi görünüyor . HTML spesifikasyonlarına göre, kullanıcı aracısı (bu durumda Chrome) geçersiz kılabilir autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Bir kullanıcı aracısı, kullanıcının bir öğenin otomatik doldurma alan adını geçersiz kılmasına izin verebilir, örneğin sayfa yazarının itirazlarına rağmen değerlerin hatırlanmasına ve önceden doldurulmasına izin vermek için "kapalı" dan "açık" a değiştirmek veya her zaman "kapalı" olarak, asla hatırlama değerler. Bununla birlikte, kullanıcı aracıları, sitenin tercihlerine bakılmaksızın tüm değerlerin her zaman hatırlanması durumunda kullanıcı için önemli güvenlik etkileri olduğundan, kullanıcıların otomatik doldurma alan adını "kapalı" dan "açık" ya da diğer değerlere önemsiz bir şekilde geçersiz kılmalarına izin vermemelidir.
Bu nedenle Chrome söz konusu olduğunda, geliştiriciler aslında "bunu autocomplete
çalışmak isteyip istemedikleri konusunda tercihlerine karar vermek için kullanıcıya bırakacağız . İstemiyorsanız tarayıcınızda etkinleştirmeyin" dedi. .
Ancak, görünüşe göre bu benim beğenme için biraz fazla gayretli, ama öyle. Spesifikasyon ayrıca böyle bir hareketin potansiyel güvenlik sonuçlarını da tartışıyor:
"Off" anahtar sözcüğü, denetimin giriş verilerinin özellikle hassas olduğunu belirtir (örneğin, bir nükleer silah için etkinleştirme kodu); veya hiçbir zaman yeniden kullanılmayacak bir değer (örneğin, banka girişi için bir kerelik anahtar) olması ve kullanıcının bu nedenle, doldurmak için UA'ya güvenmek yerine her seferinde verileri açıkça girmesi gerekir. onun için değer; veya belgenin kendi otomatik tamamlama mekanizmasını sağlaması ve kullanıcı aracısının otomatik tamamlama değerleri sağlamasını istememesi.
Herkesle aynı hayal kırıklığını yaşadıktan sonra, benim için çalışan bir çözüm buldum. Bu, autocomplete="false"
cevaplara benzer şekilde damarlıdır.
Bir Mozilla makalesi tam olarak bu soruna değinmektedir:
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
Bazı durumlarda, otomatik tamamlama özelliği kapalı olarak ayarlanmış olsa bile tarayıcı otomatik tamamlama değerleri önerir. Bu beklenmedik davranış, geliştiriciler için oldukça şaşırtıcı olabilir. Tamamlanmamayı gerçekten zorlama hilesi, özelliğe rastgele bir dize atamaktır
Aşağıdaki kod Yani gerektiğini çalışır:
autocomplete="nope"
Aşağıdakilerin her biri de öyle olmalıdır:
autocomplete="false"
autocomplete="foo"
autocomplete="bar"
Gördüğüm sorun, tarayıcı aracının autocomplete
özniteliği öğrenecek ve formu bir sonraki gördüğünde uygulayabilecek kadar akıllı olabileceğidir . Bunu yaparsa, yine de sorunun üstesinden gelmek için tek yolu autocomplete
, sayfa oluşturulduğunda öznitelik değerini dinamik olarak değiştirmek olacaktır .
Bahsetmeye değer bir nokta, birçok tarayıcının autocomplete
giriş alanları (kullanıcı adı ve şifre) ayarlarını yok sayacağıdır . Mozilla makalesinde belirtildiği gibi:
Bu nedenle, birçok modern tarayıcı giriş alanları için autocomplete = "off" özelliğini desteklemez.
- Bir site bir form için autocomplete = "off" değerini ayarlarsa ve form kullanıcı adı ve şifre giriş alanlarını içeriyorsa, tarayıcı yine de bu girişi hatırlamayı önerir ve kullanıcı kabul ederse, tarayıcı bu alanları bir dahaki sefere otomatik olarak dolduracaktır. kullanıcı bu sayfayı ziyaret eder.
- Bir site kullanıcı adı ve şifre giriş alanları için autocomplete = "off" değerini ayarlarsa, tarayıcı yine de bu girişi hatırlamayı önerir ve kullanıcı kabul ederse, kullanıcı bu sayfayı bir sonraki ziyaretinde tarayıcı bu alanları otomatik olarak doldurur.
Bu, Firefox (sürüm 38'den beri), Google Chrome (34'ten beri) ve Internet Explorer'daki (sürüm 11'den beri) davranıştır.
Son olarak, özelliğin form
öğeye mi yoksa öğeye mi ait olduğu hakkında küçük bir bilgi input
. Spec yine cevabı var:
Otomatik tamamlama özelliği atlanırsa, öğenin form sahibinin otomatik tamamlama özelliğinin durumuna karşılık gelen varsayılan değer kullanılır ("açık" veya "kapalı"). Form sahibi yoksa, "on" değeri kullanılır.
Yani. Forma koymak tüm girdi alanlarına uygulanmalıdır. Tek bir öğeye koymak, yalnızca o öğeye uygulanmalıdır (formda bir tane olmasa bile). Eğer autocomplete
varsayılan olarak karşı, hiç ayarlı değil on
.
özet
autocomplete
Tüm formda devre dışı bırakmak için:
<form autocomplete="off" ...>
Veya dinamik olarak yapmanız gerekiyorsa:
<form autocomplete="random-string" ...>
autocomplete
Tek bir öğeyi devre dışı bırakmak için (form ayarının mevcut olup olmamasına bakılmaksızın)
<input autocomplete="off" ...>
Veya dinamik olarak yapmanız gerekiyorsa:
<input autocomplete="random-string" ...>
Ayrıca, bazı kullanıcı aracılarının devre dışı bırakma konusunda en zorlandığınız girişimleri bile geçersiz kılabileceğini unutmayın autocomplete
.