Chrome, otomatik tamamlama = “kapalı” yı yok sayar


444

Bir tagbox açılır listesi kullanan bir web uygulaması oluşturdum. Bu, Chrome tarayıcı (Sürüm 21.0.1180.89) dışındaki tüm tarayıcılarda harika çalışır.

Her iki inputalanın da VE özelliğine formsahip alanlara rağmen autocomplete="off", Chrome, alan için önceki girişlerin etiket kutusu listesini yok eden bir açılır geçmiş göstermekte ısrar ediyor.


10
Teknik olarak bu soru, "Bu sorunun zaten burada bir cevabı var" olarak anılan sorudan yaklaşık 5 ay önce sorulmuştur. Bu, bundan sonra gelen kopya.
user3071434

Yanıtlar:


318

GÜNCELLEME

Artık Chrome style="display: none;"veya style="visibility: hidden;özelliklerini görmezden geliyor .

Bunu aşağıdaki gibi değiştirebilirsiniz:

<input style="opacity: 0;position: absolute;">
<input type="password" style="opacity: 0;position: absolute;">

Deneyimlerime göre, Chrome yalnızca ilk <input type="password">ve öncekini otomatik olarak tamamlar <input>. Bu yüzden ekledim:

<input style="display:none">
<input type="password" style="display:none">

Üstündeki <form>ve dava çözüldü.


54
bu artık işe yaramıyor krom 40 bu çözümü işe yaramıyor
user881703

8
Sadece bu çirkin, ama yine de olamaz için herhangi bir açıklama bulmak Neden sorusuna ??
Augustin Riedinger

4
Görünüşe göre Chrome artık onları görmezden geliyor: hiçbiri kullanılmıyor, bu yüzden alanları mutlak konumlandırma ile görünümden uzaklaştırdım ...
Christoph Leiter

2
display: none;otomatik tamamlama ile ilgili hiçbir şey yok.
Sandun Perera

276

Kullanıcı adı (veya e-posta) ve şifrenin otomatik olarak tamamlanmasını önleyin:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

Bir alanın otomatik tamamlanmasını önleyin ( çalışmayabilir ):

<input type="text" name="field" autocomplete="nope">

Açıklama:

autocompletehala <input>sahip olmasına rağmen çalışır autocomplete="off", ancak offrastgele bir dize gibi değiştirebilirsiniz nope.


Diğerleri bir alanın otomatik tamamlanmasını devre dışı bırakmak için "çözümler" (bunu yapmak için doğru yol değil, ama işe yarıyor):

1.

HTML:

<input type="password" id="some_id" autocomplete="new-password">

JS (yük altında):

(function() {
    var some_id = document.getElementById('some_id');
    some_id.type = 'text';
    some_id.removeAttribute('autocomplete');
})();

veya jQuery kullanarak :

$(document).ready(function() {
    var some_id = $('#some_id');
    some_id.prop('type', 'text');
    some_id.removeAttr('autocomplete');
});

2.

HTML:

<form id="form"></form>

JS (yük altında):

(function() {
    var input = document.createElement('INPUT');
    input.type = 'text';
    document.getElementById('form').appendChild(input);
})();

veya jQuery kullanarak :

$(document).ready(function() {
    $('<input>', {
        type: 'text'
    }).appendTo($('#form'));
});

JQuery kullanarak birden fazla alan eklemek için:

function addField(label) {
  var div = $('<div>');
  var input = $('<input>', {
    type: 'text'
  });
  
  if(label) {
    var label = $('<label>', {
      text: label
    });
    
    label.append(input);
    div.append(label);    
  } else {
    div.append(input);    
  }  
  
  div.appendTo($('#form'));
}

$(document).ready(function() {
  addField();
  addField('Field 1: ');  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form"></form>


Çalıştığı yerler:

  • Krom: 49+

  • Firefox: 44+


Kod yok, autocomplete = "" sadece bir boole kabul etmesi gerekiyorsa, cevabınız aslında otomatik tamamlamayı nasıl önler?
Tallboy

autocomplete = "new-password" şifre alanına atandığında benim için kromda çalıştı. autocomplete = formda "kapalı" olmadı.
Second2None

2
En önemli (ve benim için çalışan tek şey) kesinlikle <input> alanınızın ID ve Name özelliğinin "Kullanıcı Adı" veya "Şifre" içermediğinden emin olmaktı. Bu, autocomplete = "off" üzerinde tüm otomatik tamamlamayı etkili bir şekilde durdurdu.
GONeale

new-passwordaslında bir şifre olmayan herhangi bir gizli giriş için iyi bir yakalama, teşekkürler
antongorodezkiy

autocomplete="nope"Her iki form alanıma eklemezsem Lol aslında benim için çalıştı. Her iki alana da sahip olabileceğim ve bu alan otomatik olarak tamamlanmayacak gibi, ancak diğer alan yine de otomatik olarak tamamlanacak, ancak her iki alana koyduğumda, her ikisi de tekrar otomatik tamamlamaya başlar.
PrintlnParams

147

Görünüşe göre Chrome autocomplete="off", <form autocomplete="off">etikette olmadığı sürece yok sayar .


React için 'autoComplete = off' kullanın.
zero_cool

Chrome'un neden bu değişikliği yaptığının açıklaması için şu yanıta bakın: stackoverflow.com/a/39689037/1766230 - Kullanıcıları geliştiricilere göre önceliklendiriyorlar.
Luke

12
Chrome ekibine autocomplete = "off" kullanmak için geçerli nedenler sunmak istiyorsanız, lütfen burada yapın: bugs.chromium.org/p/chromium/issues/detail?id=587466
Chris

@Digggid Chrome 71 özelliği göz ardı etmez, ancak bazı durumlarda "kapalı" değerini yoksayar. "Ülke" gibi bir değer kullanmak benim için hala geçerli.
Burak

1
Çakışan raporlar olduğu için sadece yukarıda bir açıklama. Form etiketinde autocomplete = "off" ve bağımsız giriş etiketlerinde autocomplete = "new-password" ekleyin. Chrome 75'ten itibaren çalışma
AndyP9

83

Modern Yaklaşım

Girişinizi yapın readonlyve odakta kaldırın. Bu çok basit bir yaklaşımdır ve tarayıcılar readonlygirişleri doldurmaz . Bu nedenle, bu yöntem kabul edilir ve gelecekteki tarayıcı güncellemeleri tarafından asla üzerine yazılmaz.

<input type="text" onfocus="this.removeAttribute('readonly');" readonly />

Sonraki bölüm isteğe bağlıdır. Girişinizi, giriş gibi görünmeyecek şekilde readonlybiçimlendirin.

input[readonly] {
     cursor: text;
     background-color: #fff;
}

ÇALIŞMA ÖRNEĞİ


50
@Basit - Bu yüzden buna a diyorum modern approach. Dünyadaki kullanıcıların% 1'inden azında Javascript kapalıdır. Dürüst olmak gerekirse, web sitelerinin büyük bir kısmı Javascript'e güvendiğinde böyle küçük bir kitleye zaman ayırmaya değmez. Çok uzun zamandır web siteleri geliştiriyorum ve sitelerimin% 100'ü Javascript kullanıyor ve buna çok güveniyor. Kullanıcılar Javascript'i kapattıysa, bu benim için değil, kendi sorun ve seçimidir. Kapalı durumdayken çevrimiçi web sitelerinin en az% 90'ını ziyaret edemeyecek veya kullanamayacaklar ... Downvotunuz tamamen alakasız.
Fizzix

19
Bu bugün 49'da çalışmıyor. Chrome "geliştiricileri" stackoverflow çözümlerini izliyor ve kaldırıyor.
puchu

7
Eylül 2015'teki bu cevap temel olarak aşağıdaki Kasım 2014'teki yanıtın bir kopyasıdır.
dsuess

5
2019 - çalışmıyor.
user2060451

1
Bu ekran okuyucularını kıracak
Greg

80

Güvenilir bir geçici çözüm için bu kodu düzen sayfanıza ekleyebilirsiniz:

<div style="display: none;">
 <input type="text" id="PreventChromeAutocomplete" 
  name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>

Chrome, formda yalnızca başka bir otomatik tamamlama değerine sahip en az bir giriş öğesi olduğunda autocomplete = off'a saygı duyar.

Bu, şifre alanlarıyla çalışmaz - bunlar Chrome'da çok farklı şekilde ele alınır. Daha fazla bilgi için https://code.google.com/p/chromium/issues/detail?id=468153 adresini ziyaret edin .

GÜNCELLEME: Hata, Chromium Ekibi tarafından "Düzeltilmeyecek" olarak 11 Mart 2016'da kapatıldı . Tam açıklama için orijinal olarak açılan hata raporumdaki son yoruma bakın . TL; DR: Chrome'un otomatik doldurmayı gerçekleştirmesini önlemek için autocomplete = "new-street-address" gibi anlamsal otomatik tamamlama özelliklerini kullanın.


2
@Jonathan Cowley-Thom: Geçici çözümümü içeren bu test sayfalarını deneyin. On hub.securevideo.com/Support/AutocompleteOn , Chrome otomatik tamamlama önerileri göreceksiniz. Ardından, hub.securevideo.com/Support/AutocompleteOff üzerinde aynı girişleri deneyin . Chrome otomatik tamamlama önerilerini görmemelisiniz. Bunu Chrome 45.0.2454.101m ve 46.0.2490.71m'de test ettim ve her ikisinde de beklendiği gibi çalıştı.
JT Taylor

Bu konuda bir güncelleme daha: Chrome ekibinden bunun düzeltildiğine dair bir bildirim aldım. Bu nedenle, umarım bu geçici çözüm çok yakında gerekmeyecektir!
JT Taylor

Yukarıdaki yazıma bakın: "Bu, şifre alanlarıyla çalışmaz - bunlar Chrome'da çok farklı şekilde ele alınır. Daha fazla ayrıntı için code.google.com/p/chromium/issues/detail?id=468153 adresine bakın."
JT Taylor

46

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 autocompletegiriş 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 autocompletevarsayılan olarak karşı, hiç ayarlı değil on.

özet

autocompleteTüm formda devre dışı bırakmak için:

<form autocomplete="off" ...>

Veya dinamik olarak yapmanız gerekiyorsa:

<form autocomplete="random-string" ...>

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


1
2019 - çalışmıyor. Sürüm 76.0
user2060451

1
@ user2060451 - ne işe yaramaz? Windows ve Mac'te 76.0.3809.87'de test ettim. - her ikisi de spesifikasyona göre çalışır. yukarıda anlatıldığı gibi. Eğer "çalışmıyor" dan biraz daha fazla açıklama sağlayabilir eğer size yardımcı olabilir.
Hooligancat

1
Ben sadece (her şey yüklendikten sonra konsoldan ve sunucu tarafında ayarlamak) giriş elemanının otomatik tamamlanması için rastgele bir dize vermeye çalıştı, işe yaramadı. Form öğesine autocomplete = "off" vermek de işe yaramadı.
Nuryagdy Mustapayev


29

Chrome 34 sürümü artık görmezden geliyor autocomplete=off, bkz .

Bunun iyi bir şey mi yoksa kötü bir şey mi olduğu hakkında birçok tartışma ? Görüşleriniz nedir?


7
downvote için üzgünüm ... Bu bir tartışma sitesi değil (yerine quora deneyin) ve bir cevap vermezsiniz. Gerçi bağlantı için teşekkürler.
commonpike

25

Tarayıcı autocomplete = off auto'u umursamıyor, hatta kimlik bilgilerini yanlış metin alanına dolduruyor mu?

Kullanıcı bu alanı tıkladığında veya bu alana sekme tuşu kullandığında şifre alanını salt okunur olarak ayarlayıp etkinleştirerek düzelttim.

tarayıcıyı otomatik doldurma özelliğini düzeltin: salt okunur olarak ve writeble'ı odağa ayarlayın (fare tıklaması ve alanlar arasında sekmede )

 <input type="password" readonly  
     onfocus="$(this).removeAttr('readonly');"/>

Güncelleme: Mobil Safari, alanda imleci ayarlar, ancak sanal klavye göstermez. Yeni Düzeltme önceki gibi çalışır ancak sanal klavyeyi kullanır:

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

Canlı Demo https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

Bu arada, gözlemim hakkında daha fazla bilgi :

Bazen , aynı formda şifre alanları olduğunda Chrome ve Safari'de bu garip davranışı fark ediyorum . Sanırım tarayıcı, kayıtlı kimlik bilgilerinizi girmek için bir şifre alanı arar. Ardından, kullanıcı adını otomatik olarak DOM'daki şifre alanından önce görünen (yalnızca gözlem nedeniyle tahmin) en yakın metin benzeri giriş alanına doldurur . Tarayıcı son örnek olduğu ve kontrol edemediğiniz için, bazen autocomplete = off bile kimlik bilgilerini yanlış alanlara doldurmayı engellemez , ancak kullanıcı veya takma ad alanını engellemez .


2
onfocus kullanmak yerine, salt okunurluğu temizlemek için bir setTimeout kullanıyorum, bu yüzden kullanıcılarım girdinin salt okunur olduğunu ve asla odaklanmadığını görmüyorlar!
Hippyjim

23

Kullanabilirsiniz autocomplete="new-password"

<input type="email" name="email">
<input type="password" name="password" autocomplete="new-password">

Çalıştığı yerler:

  • Krom: 53, 54, 55
  • Firefox: 48, 49, 50

Otomatik tamamlama dizesi sabit olduğundan bu çalışmaz. Tarayıcılar bir dahaki sefere yeni şifreyi hatırlar.
adım

23

TL; DR: Chrome'a ​​bunun yeni bir şifre girişi olduğunu ve eskilerini otomatik tamamlama önerileri olarak sunmayacağını söyleyin:

<input type="password" name="password" autocomplete="new-password">

autocomplete="off" tasarım kararı nedeniyle çalışmaz - birçok araştırma, kullanıcıların bir tarayıcıda veya şifre yöneticisinde saklayabilecekleri durumlarda şifreleri kesmek için çok daha uzun ve zor olduğunu gösterir.

İçin teknik özellik autocomplete değişti ve şimdi giriş formlarının otomatik olarak tamamlanmasını kolaylaştırmak için çeşitli değerleri destekliyor:

<!-- Auto fills with the username for the site, even though it's email format -->
<input type="email" name="email" autocomplete="username">

<!-- current-password will populate for the matched username input  -->
<input type="password" autocomplete="current-password" />

Eğer varsa yok bu Chrome'u sağlamak hala tahmin etmeye çalışır ve o does daha yok sayar autocomplete="off".

Çözüm, autocompleteparola sıfırlama formları için de değerlerin olmasıdır:

<label>Enter your old password:
    <input type="password" autocomplete="current-password" name="pass-old" />
</label>
<label>Enter your new password:
    <input type="password" autocomplete="new-password" name="pass-new" />
</label>
<label>Please repeat it to be sure:
    <input type="password" autocomplete="new-password" name="pass-repeat" />
</label>

Bu autocomplete="new-password"bayrağı, Chrome'a ​​bu site için depolanmış olsa bile şifreyi tahmin etmemesini bildirmek için kullanabilirsiniz .

Chrome, standartlar olan ve muhtemelen evrensel bir desteğe sahip olacak kimlik bilgileri API'sını kullanarak siteler için şifreleri doğrudan yönetebilir .


5
Gerçekten zorlayıcı bir neden değil. Kullanıcının bir şey istemesi akıllı bir fikir olduğu anlamına gelmez. Bu, uygulamanızda tek karakterli şifrelere izin vereceğinizi söylemek kadar kötü çünkü kullanıcı daha kullanışlı buluyor. Zaman zaman güvenlik kolaylık sağlar ...
Daniel Kotin

Chrome'un bir EmailAddress ile doldurmada ısrar ettiği "ContactNoAlt" adında bir alanım var. Otomatik tamamlama açık / kapalı tercih edilir, ancak Chrome yanlış olduğu için pratik düzeyde bir çözüm bulmak gerekir. Daha sivri bir şekilde autocomplete = "off" bir standarttır - bu yüzden Chrome geliştiricilerini standartları görmezden gelebileceklerini hissettirecek kadar iyi yapan şeydir - belki de bir gün Chrome başka bir HTML parçasının uygunsuz olduğuna karar verecektir .... (bu başlıyor IE5 / 6 de-ja-vu gibi hissetmek için)
dunxz

Ben chrome kullanıcısıyım ve bu davranışı istemiyorum. Sadece ilgili web uygulamasına erişebildiğimden emin olmak için patlayan şifre kutusunu otomatik doldurmadan önce bana sormadı. Tasarruf bazı şifreleri autocompleting anlamına gelmemelidir tüm şifreleri.
Hippyjim

3
Bu yanıt (ve Googles davranışı), bunu yapmak isteyebileceğiniz başlıca nedenlerden birinin kendi (örneğin, veritabanından liste) otomatik tamamlama davranışlarınızı uygulamak olduğu gerçeğini göz ardı eder.
squarelogic.hayden

krom tarafından verilen açıkça kötü bir kararı savunmaya çalışıyorsunuz. Şirketin değiştiremeyeceğim politikasını uyguluyorum. Şimdi krom için kesmek eklemem gerekiyor. Şu anda çalışıyorlar. Çalışmayı bırakırlarsa, şirketimiz çalışanlar için varsayılan tarayıcıyı değiştirecektir. Şimdi aynı davranışa sahibiz, ancak gelecekteki yükseltmelerde kesmek ve muhtemelen bozuk sayfalarla. Ve tüm bu cevapları burada gördüğümüzde bu saldırıları kullanan birçok geliştirici var. Aferin krom.
Claudiu Creanga

23

Google Chrome ile olan sonsuz mücadeleyi rastgele karakterler kullanarak çözdüm. Otomatik tamamlamayı her zaman rastgele dize ile oluşturduğunuzda hiçbir şeyi hatırlamaz.

<input name="name" type="text" autocomplete="rutjfkde">

Diğer insanlara yardımcı olacağını umuyoruz.


12

Autocomplete="Off" artık çalışmıyor.

"Off"Örneğin, rastgele bir dize kullanmayı deneyinAutocomplete="NoAutocomplete"

Umut ediyorum bu yardım eder.


5
Chrome 73'de çalışmıyor
just_user

10

Görülen krom görmezden geldi autocomplete="off", ben "sahte" doldurmak yerine "doldurmak" krom doldurmak için "sahte giriş" kullanan aptal bir şekilde çözmek.

Misal:

<input type="text" name="username" style="display:none" value="fake input" /> 
<input type="text" name="username" value="real input"/>

Chrome "sahte giriş" i dolduracak ve gönderildiğinde sunucu "gerçek giriş" değerini alacaktır.


10

Bu soruna güncelleştirilmiş bir çözüm getirmek için bu yanıtı gönderiyorum. Şu anda Chrome 49 kullanıyorum ve bunun için belirli bir cevap çalışması yok. Ayrıca diğer tarayıcılar ve önceki sürümlerle çalışan bir çözüm arıyorum.

Bu kodu formunuzun başına yerleştirin

<div style="display: none;">
    <input type="text" autocomplete="new-password">
    <input type="password" autocomplete="new-password">
</div>

Ardından, gerçek şifre alanınız için

<input type="password" name="password" autocomplete="new-password">

Artık çalışmıyorsa veya başka bir tarayıcı veya sürümle ilgili bir sorunla karşılaşırsanız bu yanıtı yorumlayın.

Onay tarihi:

  • Krom: 49
  • Firefox: 44, 45
  • Kenar: 25
  • Internet Explorer: 11

1
Ne yazık ki, Chrome sürümü 49.0.2623.87 ve TextBox için çalışmıyor, yine de otomatik tamamlamanın açıldığını görüyorum.
eYe

8

buna bir çözüm arayan herkese, sonunda anladım.

Sayfa yalnızca HTML5 sayfasıysa (XHTML kullanıyordum) Chrome yalnızca autocomplete = "off" uyar.

Sayfamı HTML5'e dönüştürdüm ve sorun ortadan kalktı (facepalm).


6

Giriş türü özelliğini olarak değiştirin type="search".

Google, bir tür arama içeren girişlere otomatik doldurma uygulamaz.


1
Ben aşağı oy: krom 60 üzerinde test: Bu otomatik tamamlama önlemez ..
boly38

6

Geçen haftaya kadar, aşağıdaki iki çözümün Chrome, IE ve Firefox için işe yaradığı ortaya çıktı. Ancak Chrome sürüm 48'in (ve hala 49'da) piyasaya sürülmesiyle artık çalışmazlar:

  1. Formun üst kısmında aşağıdakiler bulunur:
<input style="display:none" type="text" name="fakeUsername"/>
<input style="display:none" type="password" name="fakePassword"/>
  1. Şifre giriş öğesinde aşağıdakiler:

    Otomatik tamamlama = "kapalı"

Bu yüzden hızlı bir şekilde bunu düzeltmek için, başlangıçta şifre giriş öğesini başlangıçta devre dışı olarak ayarlamak için büyük bir kesmek kullanmaya çalıştım ve sonra tekrar etkinleştirmek için belgeye hazır işlevinde bir setTimeout kullandım.

setTimeout(function(){$('#PasswordData').prop('disabled', false);}, 50);

Ancak bu çok çılgın görünüyordu ve biraz daha arama yaptım ve Chrome Otomatik Doldurmayı Devre Dışı Bırakma'da @tibalts yanıtını buldum . Onun cevabı şifre girişinde autocomplete = "new-password" kullanmak ve bu tüm tarayıcılarda çalışıyor gibi görünüyor (bu aşamada yukarıda 1 numaralı sabitlememi tuttum).

Google Chrome geliştirici tartışmalarındaki bağlantı: https://code.google.com/p/chromium/issues/detail?id=370363#c7


@JorgeSampayo Yalnızca şifre girişlerinde çalışır, ancak metin girişlerinde çalışmaz.
eYe

6

autocomplete=off modern tarayıcılarda büyük ölçüde göz ardı edilir - öncelikle şifre yöneticileri vb.

autocomplete="new-password"Tüm tarayıcılar tarafından tam olarak desteklenmediğini eklemeyi deneyebilirsiniz , ancak bazı tarayıcılarda çalışır


6

autocomplete="off"genellikle çalışır, ancak her zaman değil. nameGiriş alanına bağlıdır . "Adres", "e-posta", "ad" gibi adlar otomatik olarak tamamlanır (tarayıcılar kullanıcılara yardımcı olduklarını düşünür), "kod", "pim" gibi alanlar otomatik olarak tamamlanmaz ( autocomplete="off"ayarlanmışsa)

Benim sorunlar oldu - otomatik tamamlama google ile karıştırmasını adres yardımcı

Yeniden adlandırarak düzelttim

itibaren

<input type="text" name="address" autocomplete="off">

için

<input type="text" name="the_address" autocomplete="off">

Krom 71'de test edilmiştir.


1
Bence bu otomatik tamamlamayı kaldırmanın en son yolu. 2020 Mayıs ayında krom 81 üzerinde çalışıyor
NIKHIL CM


5

Bunun benim durumumda neden çalıştığına dair bir ipucu yok, ancak kromda kullandım autocomplete="none"ve Chrome metin alanım için adres önermeyi bıraktı.


4

Chrome 42'den itibaren, bu konudaki çözümlerin / saldırıların hiçbiri (itibarıyla 2015-05-21T12:50:23+00:00) tek bir alanın veya formun tamamı için otomatik tamamlamayı devre dışı bırakmak için çalışmıyor.

DÜZENLEME: Aslında otomatik doldurmayı display: noneönlemek için diğer alanlardan önce formunuza yalnızca bir kukla e-posta alanı eklemeniz gerektiğini (ile gizleyebilirsiniz ). Chrome'un her otomatik tamamlanan alanla bir tür form imzası depoladığını ve başka bir e-posta alanı ekleyerek bu imzayı bozduğunu ve otomatik tamamlamayı önlediğini varsayıyorum.

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

İyi haber şu ki, "form imzası" bu şekilde bozulduğu için, alanların hiçbiri otomatik olarak tamamlanmadığından, gönderilmeden önce sahte alanları temizlemek için JS gerekmez.

Eski Cevap:

Hala uygun bulduğum tek şey, gerçek alanlardan önce e-posta ve şifre türünde iki kukla alan eklemektir. Onları display: nonegizlenecek şekilde ayarlayabilirsiniz (bu alanları yok sayacak kadar akıllı değildir):

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="password" name="fake_password" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

Maalesef alanlar formunuz dahilinde olmalıdır (aksi takdirde her iki girdi grubu da otomatik olarak doldurulur). Bu nedenle, sahte alanların gerçekten göz ardı edilmesi için, form göndererek bunları temizlemek için bazı JS'ye ihtiyacınız olacak:

form.addEventListener('submit', function() {
    form.elements['fake_email'].value = '';
    form.elements['fake_password'].value = '';
});

Yukarıdan, değeri Javascript ile temizlemenin otomatik tamamlamayı geçersiz kılmaya çalıştığına dikkat edin. Dolayısıyla, JS devre dışı bırakıldığında uygun davranışı kaybetmek kabul edilebilirse, Chrome için bir JS otomatik tamamlama "çoklu dolgusu" ile bunların tümünü basitleştirebilirsiniz:

(function(document) {

    function polyfillAutocomplete(nodes) {

        for(var i = 0, length = nodes.length; i < length; i++) {

            if(nodes[i].getAttribute('autocomplete') === 'off') {

                nodes[i].value = '';
            }
        }
    }

    setTimeout(function() {

        polyfillAutocomplete(document.getElementsByTagName('input'));
        polyfillAutocomplete(document.getElementsByTagName('textarea'));

    }, 1);

})(window.document);

4

Giriş alanının bir ad veya e-posta aldığı benzer bir sorun yaşadım. Autocomplete = "off" ayarladım, ancak Chrome yine de önerileri zorunlu kıldı. Bunun nedeni, yer tutucu metinde "ad" ve "e-posta" kelimelerinin bulunmasıydı.

Örneğin

<input type="text" placeholder="name or email" autocomplete="off" />

Yer tutucusundaki kelimelere sıfır genişlikte bir boşluk koyarak etrafta dolaştım. Artık Chrome otomatik tamamlama yok.

<input type="text" placeholder="nam&#8203;e or emai&#8203;l" autocomplete="off" />

4

Chrome 48+ sürümünde bu çözümü kullanın:

  1. Sahte alanları gerçek alanların önüne koyun:

    <form autocomplete="off">
      <input name="fake_email"    class="visually-hidden" type="text">
      <input name="fake_password" class="visually-hidden" type="password">
    
      <input autocomplete="off" name="email"    type="text">
      <input autocomplete="off" name="password" type="password">
    </form>
  2. Sahte alanları gizle:

    .visually-hidden {
      margin: -1px;
      padding: 0;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip: rect(0 0 0 0);
      clip: rect(0, 0, 0, 0);
      position: absolute;
    }
  3. Sen yaptın!

Ayrıca bu eski sürümler için de çalışır.


@yivo Görünüşe göre urs ve og yanıtı arasındaki tek fark! önemli etiketler, bu yüzden onları ekledim, hala çalışmıyor. dropbox.com/s/24yaz6ut7ygkoql/…
Mike Purcell

@MikePurcell Sahip değilsiniz autocomplete="off" üzerinde formetiketinin. Ayrıca formetiketin hemen ardından sahte girişler koymaya çalışın .
yivo

@Yivo: Önerilerinizi denedim, e-posta alanı için iyi çalıştı, ancak şifre alanı için otomatik doldurma açılır menüsü hala gerçekleşiyor. dropbox.com/s/5pm5hjtx1s7eqt3/…
Mike Purcell

3

Ayarını krom v. 34, sonra autocomplete="off"at <form>etiket `nın çalışmaları

Bu sinir bozucu davranışı önlemek için değişiklikler yaptım:

  1. Kaldır nameve idşifre girişinin
  2. (Ex .: girişteki bir sınıf koyun passwordInput)

(Şimdiye kadar Chrome kaydedilen şifreyi girişe koymayacak, ancak form şimdi bozuk)

Son olarak, formun çalışmasını sağlamak için, kullanıcı gönder düğmesini tıkladığında veya form gönderimini tetiklemek istediğinizde bu kodu çalıştırmak için kullanın:

var sI = $(".passwordInput")[0];
$(sI).attr("id", "password");
$(sI).attr("name", "password");

Benim durumumda, id="password" name="password"şifre girişinde hav alırdım , bu yüzden gönderimi tetiklemeden önce onları geri koydum.


3

Tüm çözümleri denedikten sonra, formun şifre alanına sahip olan krom sürümü: 45 için çalışıyor gibi görünüyor:

 jQuery('document').ready(function(){
        //For disabling Chrome Autocomplete
        jQuery( ":text" ).attr('autocomplete','pre'+Math.random(0,100000000));
 });

3

Chrome 49'a yeni güncelledim ve Diogo Cid'in çözümü artık çalışmıyor.

Sayfa yüklendikten sonra alanları çalışma zamanında gizleyerek ve kaldırarak farklı bir geçici çözüm gerçekleştirdim.

Chrome artık ilk görüntülenen type="password" alana ve önceki type="text"alanına kimlik bilgilerini uygulayan orijinal geçici çözümü yok sayar , bu nedenle her iki alanı da CSS kullanarak gizledim visibility: hidden;

<!-- HTML -->
<form>
    <!-- Fake fields -->
    <input class="chromeHack-autocomplete">
    <input type="password" class="chromeHack-autocomplete">

    <input type="text" placeholder="e-mail" autocomplete="off" />
    <input type="password" placeholder="Password" autocomplete="off" />
</form>

<!-- CSS -->
.chromeHack-autocomplete {
    height: 0px !important;
    width: 0px !important;
    opacity: 0 !important;
    padding: 0 !important; margin: 0 !important;
}

<!--JavaScript (jQuery) -->
jQuery(window).load(function() {
    $(".chromeHack-autocomplete").delay(100).hide(0, function() {
        $(this).remove();
    });
});

Çok zarif görünmeyebileceğini biliyorum ama işe yarıyor.


2

Bu çözümü en uygun buldum:

function clearChromeAutocomplete()
{
// not possible, let's try: 
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) 
{
document.getElementById('adminForm').setAttribute('autocomplete', 'off'); 
setTimeout(function () {
        document.getElementById('adminForm').setAttribute('autocomplete', 'on'); 
}, 1500);
}
}

Dom kullanıma hazır olduktan sonra veya form oluşturulduktan sonra yüklenmelidir.


2

Otomatik tamamlamanın bir kullanıcı seçimi olması gerektiğini kabul etsem de, Chrome'un bu konuda aşırı hevesli olduğu zamanlar vardır (diğer tarayıcılar da olabilir). Örneğin, farklı bir ada sahip bir şifre alanı hala kaydedilmiş bir şifre ile otomatik olarak doldurulur ve bir önceki alan kullanıcı adıyla doldurulur. Bu, özellikle form bir web uygulaması için bir kullanıcı yönetimi formu olduğunda ve otomatik doldurmanın formu kendi kimlik bilgilerinizle doldurmasını istemediğinizde berbattır.

Chrome şimdi autocomplete = "off" ifadesini tamamen yok sayar. JS hackleri işe yarayabilirken, yazarken çalışan basit bir yol buldum:

Parola alanının değerini kontrol karakteri 8 olarak ayarlayın ( "\x08"PHP veya&#8; HTML olarak). Bu, bir değere sahip olduğu için Chrome'un otomatik doldurmasını durdurur, ancak bu, geri boşluk karakteri olduğu için gerçek bir değer girilmez.

Evet, bu hala bir hack, ama benim için çalışıyor. YMMV.


Chrome 40'ta çalışmıyor gibi görünüyor
hood

Sanırım bu hack'i aldılar ve kontrol karakterlerini göz ardı ettiler, bu yüzden şimdi boş olarak değerlendiriliyor. Doğru, güncel çözüm için @ ice-cream stackoverflow.com/a/16130452/752696 tarafından verilen cevaba bakınız .
15'te spikyjt

Burada da aynı kullanım durumu: Kullanıcı yönetimi ile çalışma ve kendi kimlik bilgilerinin otomatik olarak doldurulması. Ancak kendi kodum olduğundan ve formyeni kullanıcılar oluşturmak ve mevcut kullanıcıları düzenlemek için yeniden kullandığım için inputJS üzerinden değerleri geçersiz kılmak otomatik tamamlamayı kaldırdı.
nuala
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.