Web form alanında / giriş etiketinde tarayıcı Otomatik Tamamlama özelliğini nasıl devre dışı bırakırsınız?


2789

autocompleteBelirli bir input(veya form field) ana tarayıcıda nasıl devre dışı bırakıyorsunuz ?


2
Test cihazlarının manuel olarak çok fazla bilgi girmesi gereken bazı sistemlerde, seçeneği test ederken devre dışı bırakabilmeniz ve 'sekme> aşağı ok> sekme> aşağı ok vb. . '
Simon_Weaver

Yanıtlar:


2623

Firefox 30 autocomplete="off"parolaları yok sayar ve parolanın istemcide saklanıp saklanmayacağını kullanıcıya sormayı tercih eder. 5 Mayıs 2014 tarihli aşağıdaki açıklamaya dikkat edin:

  • Parola yöneticisi her zaman bir parola kaydetmek isteyip istemediğini sorar. Parolalar, kullanıcının izni olmadan kaydedilmez.
  • IE ve Chrome'dan sonra bu değişikliği uygulayan üçüncü tarayıcı biziz.

Göre Mozilla Geliştirici Ağı dokümantasyon, Boole formu eleman niteliği autocompleteönler eski tarayıcılarda önbelleğe alınmasını verileri oluştururlar.

<input type="text" name="foo" autocomplete="off" />

45
Bu Firefox 3.0.3 benim için işe yaramadı INPUT yerine FORM otomatik tamamlama özniteliği koymak zorunda kaldı.
Winston Fassett

17
Otomatik tamamlama yalnızca HTML 5 standartlarında tanımlanır, bu nedenle HTML 4'e karşı çalıştırdığınız tüm doğrulamaları
kıracaktır

96
@ Winston, hem forma hem de giriş öğesinin kendisine koymalısınız. Bu şekilde, tarayıcıların standart olmayan tüm özelliklerini kapsarsınız.
AviD

83
Ayrıca web uygulamanızı test etmeden önce autocomplete = on uzantısında (Chrome kullanıyorsanız) devre dışı bırakmayı unutmayın . Yoksa benim gibi gerçek aptal hissedeceksin. ;)
Jo Liss


314

Ek olarak autocomplete=off , form alan adlarınızın sayfayı oluşturan kodla, belki de adların sonuna oturuma özgü bir dize ekleyerek rastgele sıralanmasını sağlayabilirsiniz.

Form gönderildiğinde, sunucu tarafında işlem yapmadan önce bu parçayı çıkarabilirsiniz. Bu, web tarayıcısının alanınız için bağlam bulmasını önler ve ayrıca bir saldırgan form gönderme için alan adlarını tahmin edemeyeceği için XSRF saldırılarını önlemeye yardımcı olabilir.


10
Bu, autocomplete = "off" kullanmaya kıyasla çok daha iyi bir çözümdür. Tek yapmanız gereken, her sayfa yüklemesinde yeni bir ad oluşturmak ve bu adı ileride kullanmak üzere $ _SESSION'a kaydetmek:$_SESSION['codefield_name'] = md5(uniqid('auth', true));
enchance

78
Hayır, bu daha iyi bir çözüm değildir, çünkü bu ayar için tercihin kaynağı web tarayıcısı olarak da bilinen kullanıcı aracısıdır. Belirli davranışları destekleme (HTML 5'in yapmaya çalıştığı) ile kullanıcı adına karar vererek onu zorlamak arasında bir fark vardır; bu, daha iyi bir çözüm olduğunu önerir.
amn

15
Bu çözüm tüm tarayıcılarla çalışabilir, bu bakımdan "daha iyi". Yine de, amn doğrudur, kullanıcılarınız için otomatik tamamlamayı devre dışı bırakmaya karar vermek iyi bir fikir değildir. Bu, otomatik tamamlamayı yalnızca kendi otomatik tamamlama işlevinizi oluşturmayı planladığınızda ve çakışma veya garip davranış istemediğinizde olduğu gibi çok belirli durumlarda devre dışı bırakacağım anlamına gelir.
macguru2000

8
XSRF saldırılarıyla ilgili olarak, ne tür bir saldırı gerçekleştirdiğinizden emin değilim, ancak saldırgan, alanları tanımlamak için sunucu tarafında yaptığınız gibi son kısmı çıkaramaz mı? Ya da saldırgan alanları gönderiyorsa, sunucu tarafından çıkarılacağı için kendi rastgele dizelerini ekleyemediler mi?
xr280xr

9
@ macguru2000 kendi otomatik tamamlamanızı oluşturmak tamamen yasal ve yaygın bir kullanım durumudur. Gerçekten tarayıcı, geliştiricilerin, bunun gibi
hack'leri

235

Büyük tarayıcıların ve şifre yöneticilerinin çoğu (doğru, IMHO) artık yok sayılıyor autocomplete=off.

Neden? Birçok banka ve diğer "yüksek güvenlikli" web siteleri autocomplete=off, giriş sayfalarına "güvenlik amaçlı" ekledi , ancak bu aslında güvenliği düşürüyor, çünkü bu yüksek güvenlikli sitelerin şifrelerini otomatik tamamlamadan beri hatırlaması kolay (ve böylece kırılıyor) Kırıldı.

Uzun zaman önce çoğu şifre yöneticisi göz ardı etmeye başladı autocomplete=offve şimdi tarayıcılar sadece kullanıcı adı / şifre girişleri için aynısını yapmaya başlıyor.

Ne yazık ki, otomatik tamamlama uygulamalarındaki hatalar kullanıcı adı ve / veya şifre bilgilerini uygunsuz form alanlarına ekleyerek form doğrulama hatalarına neden olur veya daha da kötüsü, yanlışlıkla kullanıcı adlarını kasıtlı olarak boş bırakılan alanlara ekler.

Bir web geliştiricisi ne yapmalı?

  • Bir sayfadaki tüm parola alanlarını kendileri tutabiliyorsanız, parola alanının varlığı, kullanıcı / geçiş otomatik tamamlamasının devreye girmesi için ana tetikleyici gibi göründüğü için harika bir başlangıçtır. Aksi takdirde, aşağıdaki ipuçlarını okuyun.
  • Safari , 2 şifre alanı bulunduğunu fark eder ve bu durumda, bir giriş formu değil, bir şifre değiştirme formu olması gerektiğini varsayarak otomatik tamamlamayı devre dışı bırakır. Bu nedenle, izin verdiğiniz formlar için 2 şifre alanı (yeni ve yeni onaylayın) kullandığınızdan emin olun.
  • Ne yazık ki Chrome 34, bir şifre alanı gördüğünde alanları kullanıcı / geçiş ile otomatik olarak doldurmaya çalışacaktır. Umarım Safari davranışını değiştirecekleri oldukça kötü bir hatadır. Ancak, bunu formunuzun en üstüne eklemek şifre otomatik doldurmayı devre dışı bırakıyor gibi görünüyor:

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

Henüz IE veya Firefox'u tam olarak araştırmadım, ancak yorumlarda başkalarının bilgisi varsa cevabı güncellemekten memnuniyet duyarız.


5
"bunu sayfanıza eklemek sayfanın otomatik doldurmasını devre dışı
bırakıyor

5
@wutzebaer, Chrome gizli şifre alanını fark eder ve otomatik tamamlamayı durdurur. Bu, kullanıcının fark etmeden sitenin şifre bilgilerini çalmasını önlemek içindir.
David W

6
Kod snippet'iniz Chrome, Firefox, IE 8 ve IE 10'daki giriş alanları için otomatik tamamlamaları önler. IE 11'i test etmedi. İyi şeyler! Hala çalışan basit bir cevap.
Sam Watkins

3
Safari notunuz en azından Aralık 2015'ten itibaren Chrome'da da çalışıyor gibi görünüyor. Kayıt formunda, giriş formundaki verilerle otomatik olarak tamamlanan bir kullanıcı adı ve şifre alanım vardı. Bir type='password'sayfada iki alan oluşturmak , tarayıcının "şifreyi kaydet" otomatik tamamlamasının yok sayılmasına neden oldu;
Matt Fletcher

3
Ek şifre alanı gizlenmedikçe Chrome 55'te artık çalışmıyor gibi görünüyor, bu da amacı bozuyor.
jokkedk

160

Bazen hatta otomatik tamamlama = off olur doldurmaya engellemez kullanıcı veya takma alan yanlış alanlara kimlik bilgilerini değil.

Bu geçici çözüm, apinstein'ın tarayıcı davranışı hakkındaki gönderisine ek olarak.

tarayıcı otomatik dolgusunu salt okunur olarak düzeltin ve odakta yazılabilir olarak ayarlayın (tıklama ve sekme)

 <input type="password" readonly  
     onfocus="this.removeAttribute('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

Çünkü Tarayıcı otomatik olarak kimlik bilgilerini yanlış metin alanına dolduruyor !?

Aynı formda şifre alanları olduğunda Chrome ve Safari'de bu garip davranışı fark ettim . Sanırım tarayıcı, kayıtlı kimlik bilgilerinizi girmek için bir şifre alanı arar. Ardından, DOM'daki şifre alanından önce görünen en yakın metin benzeri giriş alanını otomatik olarak doldurur (sadece gözlem nedeniyle tahmin eder). Tarayıcı son örnek olduğu ve kontrol edemediğiniz için,

Yukarıdaki bu salt okunurluk benim için çalıştı.


8
Bir javascript yoksa, tüm form başarısız olur. -1
Jimmy Kane

8
@JimmyKane anahtarı da javascript kullanarak ilk etapta öznitelik eklemek olacaktır (ki burada dsuess yapmadı, sadece tamlık uğruna ekleme).
trnelson

@tmelson Anlıyorum ama yine de neden devre dışı bırakmak için js kullanın? Yerli olarak geliştirilebilecek şeyler için js'den kaçınalım. Yine de sana katılıyorum.
Jimmy Kane

3
Bu, IE8'de doğru şekilde çalışmaz, salt okunur parola alanı, ilk kez odaklandığınızda, yalnızca odaklanmadan ve tekrar odaklandıktan sonra düzenlenemez. Güzel fikir, ama ne yazık ki biraz fazla hacky ve kullanımı güvenli değil.
Sam Watkins

Bu mu değil (örneğin IE 11 ve IE Kenar) tüm tarayıcılarda düzgün çalışması. En kısa sürede readonlyçıkarılır, otomatik tamamlamada saha sonuçlarının müteakip seçim dönen.
Gitti Kodlama

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

Bu, Internet Explorer ve Mozilla FireFox'ta çalışacaktır, olumsuz, XHTML standardı olmamasıdır.


Form öğesine eklemenin her zaman form içindeki bireysel girişlere uygulanmasını engellemediğini fark ettim. Bu nedenle, doğrudan giriş elemanına yerleştirmek en iyisidir.
sholsinger

15
Aslında @sholsinger, hem forma hem de giriş öğesinin kendisine koymak en iyisidir. Bu şekilde, tarayıcıların standart olmayan tüm özelliklerini kapsarsınız.
AviD

2
Ne yazık ki, IE 11'den itibaren Microsoft artık buna saygı duymuyor input type="password". Umarım başka hiçbir tarayıcı bu işlevi kaldırmayı seçmez.
SamHuckaby

Ayar autocomplete="off"üzerinde formChrome için çalıştı tek şeydir.
Andrew

106

Chrome için çözüm autocomplete="new-password", giriş türü şifresine eklemektir . Lütfen aşağıdaki Örneği inceleyin.

Misal:

<form name="myForm"" method="post">
   <input name="user" type="text" />
   <input name="pass" type="password" autocomplete="new-password" />
   <input type="submit">
</form>

Chrome, bir kutu şifresi bulursa verileri her zaman otomatik olarak tamamlar; bu kutu için belirtmek için yeterlidir autocomplete = "new-password".

Bu benim için iyi çalışıyor.

Not: F12Değişikliklerin geçerli olduğundan emin olun , tarayıcılar sayfayı önbelleğe birçok kez kaydettiğinden, bu bana işe yaramadığına dair kötü bir izlenim verdi, ancak tarayıcı aslında değişiklikleri getirmedi.


2
Bu, Chrome'da yalnızca type = "password" için değil, diğer alan türleri için de çalışır.
Jake

Şifre, e-posta ve metin türleriyle kullandım ve işe yaradı. Ben sadece böyle kullandım: autocomplete = "new"
Crak_mboutin

autocomplete = "nope" name = "pswd" ve kullanılan gerçek <input name = "dummyPassword" type = "password" style = "display: none;"> gerçek şifre giriş alanından önce. Bu benim için çalıştı.
Denuka


Bu, yalnızca Chrome'da değil hemen hemen tüm tarayıcılarda çalışır: autocomplete # Browser_compatibility .
Andrew Morton

60

Diğerlerinin söylediği gibi, cevap autocomplete="off"

Ancak, bunu bazı durumlarda bunun bazı cevaplar olarak kullanmanın ve çoğaltmanın neden iyi bir fikir olduğunu belirtmeye değer. bunu kapatmak için daha iyi değil tavsiye ettiler sorular.

Kredi kartı numarası depolayan tarayıcıları durdurmak kullanıcılara bırakılmamalıdır. Çok fazla kullanıcı bunun bir sorun olduğunu bile fark etmeyecek.

Kredi kartı güvenlik kodları için alanların kapatılması özellikle önemlidir. Gibi bu sayfayı devletler:

"Güvenlik kodunu asla saklamayın ... değeri, bunu sağlamanın tek yolunun fiziksel kredi kartından okumak olduğu ve bunu sağlayan kişinin kartı tuttuğunu kanıtladığı varsayımına bağlıdır."

Sorun şu ki, halka açık bir bilgisayarsa (siber kafe, kütüphane vb.) Diğer kullanıcıların kart bilgilerinizi çalması kolaydır ve hatta kendi makinenizde kötü amaçlı bir web sitesi otomatik tamamlama verilerini çalabilir .


7
bir siteye gittim ve açılır menüde kartımı hatırladıysam çok mutsuz olurdum. nasıl bu kadar dikkatsiz olabileceklerini merak etmeye başladım.
Simon_Weaver

8
Çok daha basit / daha kritik durum. Bir kullanıcının sitemin yönetici kısmındaki sayfasını ziyaret ettiğimde, kullanıcı adı ve şifresini yönetici kullanıcı adı ve şifrem olacak şekilde ayarlamaya çalışır, bunun bir giriş formu olmadığını söyleyemezsiniz. Yönetici parolamın hatırlanmasını istiyorum, ancak bu hatırlanan kullanıcı adını / parolayı daha sonra düzenlediğim kullanıcılara uygulamaya çalışmanın kritik bir hatadır.
rjmunro

34

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.


2
Bu daha da iyi çalışıyor. Her sayfa yüklemesi için rastgele bir kod oluşturan küçük bir JS ekleyebilir ve bu kodu giriş alanına ekleyebilirsiniz: <code> function autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } dönüş autoId; } $ ('. autocompleteoff'). attr ('autocomplete', autoId ()); </code>autocompleteoff Sınıfı istediğiniz giriş alanına .
Raghuram Kasyap

kromumda çalışmıyor Sürüm 68.0.3440.106 (Resmi Derleme) (64 bit)
Sukanya Purushothaman

Chrome artık standart "kapalı" özelliğini kullanacak şekilde düzeltildi
MacK

1
Ne yazık ki krom üzerinde standart olarak adlandırılandan daha iyi çalışıyor
Nour Lababidi

1
Bugün Chrome'un "Off" ile rastgele dizenin üzerine yazacağını buldum. Bu özelliği yapan Chrome geliştiricilerinin kötü ve kontrolsüz olduğuna inanamıyorum. Neden ohh var.
adım

33

Otomatik tamamlamayı devre dışı bırakmaktan kaçınmak için bu yanıtlarla farklılık göstermek için yalvarmalıyım.

İlk ortaya çıkacak şey, otomatik tamamlamanın giriş formu alanlarında açıkça devre dışı bırakılmaması bir PCI-DSS hatası olmasıdır. Buna ek olarak, bir kullanıcının yerel makinesi tehlikeye atılırsa, herhangi bir otomatik tamamlama verisi bir saldırgan tarafından açık bir şekilde saklandığı için önemsiz bir şekilde elde edilebilir.

Kullanılabilirlik için kesinlikle bir argüman var, ancak hangi form alanlarının otomatik tamamlama devre dışı bırakılması ve hangilerinin olmaması gerektiği konusunda çok iyi bir denge var.


AutoComplete kullanarak bir metin girişini doldurduğunuzda IE'nin onChange olaylarını tetiklemediğini fark ettim. Düzinelerce formumuz var ve binden fazla onChange etkinliği (giriş doğrulama, iş mantığı) her tarafa dağılmış durumda. Son zamanlarda IE'yi daha yeni bir sürüme yükselttik ve ani garip şeyler olmaya başladı. Neyse ki bir intranet uygulaması çalıştırıyoruz ve otomatik tamamlama bizim için bir UX sorunu değil, sadece kapatmak daha kolay.
Robotron

3
Bir kullanıcının yerel makinesi tehlikeye düşerse, vidalanır, nokta. Yüklü bir keylogger olabilir, sahte bir SSL kök sertifikası eklenmiş olabilir ve her şey sahte bir proxy vb. Yoluyla gönderilebilir. Otomatik tamamlamayı devre dışı bırakmak için gerçek bir nedenim var - Yönetici olarak giriş yaptığımda ve kullanıcı düzenleme sayfasını ziyaret ettiğimde o kullanıcı yönetici kullanıcı adım ve şifrem. Bu davranışı önlemem gerekiyor.
rjmunro

1
Tarayıcı satıcıları kendi çıkarlarını arıyorlar. Kayıtlı şifreler = kullanıcı kilidi. Otomatik tamamlama açık / kapalı çok basitti - neden bu arada, tarayıcının her bir siteden değerli semantik veriler toplamasına izin veren karmaşık bir anlamsal ipuçları standardı ( html.spec.whatwg.org/multipage/… ) kullanıcı ziyaretleri?
aro_tech

çözmeye çalıştığım özel kullanım durumu şudur: zaten giriş yapmışlardır. Ama şimdi daha hassas bir şeye erişmek üzereler. Sigara içmeleri ve kötü bir kişinin sandalyelerine oturmaları için yürüdükleri ihtimaline karşı onları yeniden doğrulayan bir iletişim kutusu göstermek istiyorum. otomatik tamamlamayı yenmek için birkaç teknik denedi ve hiçbir şey işe yaramıyor. şimdi en azından iyi eski 'password = window.prompt ("Lütfen şifrenizi tekrar girin")' artı oturumdaki kullanıcı adını düşünüyorum ve bunu doğrulamaya çalışıyorum.
David

31

Üç seçenek: Birincisi:

<input type='text' autocomplete='off' />

İkinci:

<form action='' autocomplete='off'>

Üçüncü (javascript kodu):

$('input').attr('autocomplete', 'off');

2
Birinci ve ikinci seçenekler bir seçenek olmalıdır, çünkü tarayıcıların bunu nasıl kullandığına bağlı olarak değişir.
rybo111

$ FormElement.attr ('autocomplete', 'off') denendi; ve işe yaramıyor.
Ben Sinclair

22

İlgili veya aslında, tamamen zıt notta -

"Yukarıda belirtilen formun kullanıcısıysanız ve otomatik tamamlama işlevini yeniden etkinleştirmek istiyorsanız, bu yer imleri sayfasındaki " parolayı hatırla "yer imini kullanın . Sayfadakiautocomplete="off" tüm formlardaki tüm öznitelikleri kaldırır . "


20

Aslında bir site için sasb fikrini kullandık . Bir doktor ofisini çalıştırmak için bir tıbbi yazılım web uygulamasıydı. Bununla birlikte, müşterilerimizin birçoğu yarı kamu terminalleri de dahil olmak üzere birçok farklı iş istasyonu kullanan cerrahlardı. Bu nedenle, otomatik kaydedilen şifrelerin anlamını anlamayan veya dikkat etmeyen bir doktorun yanlışlıkla giriş bilgilerini kolayca erişemediğinden emin olmak istediler. Tabii ki, bu IE8, FF3.1, vs.'de yer almaya başlayan özel tarama fikrinden önceydi. Buna rağmen, birçok doktor değişmeyen BT'li hastanelerde eski okul tarayıcılarını kullanmak zorunda kalıyor.

Bu nedenle, giriş sayfasının yalnızca bu gönderi için çalışacak rastgele alan adları oluşturmasını sağladık. Evet, daha az kullanışlıdır, ancak giriş bilgilerini genel terminallerde saklamama konusunda kullanıcıyı baştan çıkarır.


20

Bu konuşmada hiçbir çözüm benim için çalışmadı.

Sonunda hiçbir Javascript gerektiren saf bir HTML çözümü bulduk , modern tarayıcılarda çalışır (IE hariç; en az 1 catch vardı, değil mi?) Ve tüm form için otomatik tamamlamayı devre dışı bırakmanızı gerektirmez.

Otomatik tamamlamayı kapatıp formda çalışmasını istediğiniz formherhangi bir inputşey için AÇIK duruma getirmeniz yeterlidir. Örneğin:

<form autocomplete="off">
    <!-- these inputs will not allow autocomplete and chrome 
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- this field will allow autocomplete to work even 
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>

Tamamen aradığım şey buydu!
Marco

20

Sadece hazır autocomplete="off". Bunu yapmak için çok iyi bir neden var: Kendi otomatik tamamlama işlevinizi sağlamak istiyorsunuz!


20

Sonsuz çözümler deniyorum ve sonra bunu buldum:

autocomplete="off"Sadece kullanmak yerineautocomplete="false"

Bu kadar basit ve Google Chrome'da da bir cazibe gibi çalışıyor!


Kromda söylediğin gibi, off değeri çalışmıyor. "Yanlış" olması gerekiyor
azuax

Chrome 44.0.2403.130 üzerinde çalışıyor.
GuiGS

1
Bunu denedim: $ formElement.attr ('otomatik tamamlama', 'yanlış'); üzgünüm çalışmıyor.
Ben Sinclair

20

Bu benim için çalışıyor.

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

Bu stratejiyi metin, select vb. Diğer kontrollerde de kullanabiliriz.


bu en son cevap olmalı. en son kromda benim için çalışan tek cevap
Nick Chan Abdullah

19

autocomplete=offHTML 5'te desteklendiğini düşünüyorum .

Kendinize bunu neden yapmak istediğinizi sorun - bazı durumlarda mantıklı olabilir, ancak bunu yapmak için yapmayın.

Kullanıcılar için daha az uygundur ve OS X'teki bir güvenlik sorunu bile değildir (aşağıda Soren tarafından belirtilmiştir). Kullanıcıların şifrelerinin uzaktan çalınmasından endişe ediyorsanız, uygulamanız kullansa bile bir tuş kaydedici yine de yapabilir autcomplete=off.

Bir tarayıcıya sahip olmayı seçen bir kullanıcı olarak bilgilerimin çoğunu hatırlıyorum, siteniz benimkini hatırlamıyorsa sinir bozucu bulurdum.


17

Ek olarak

autocomplete="off"

kullanım

readonly onfocus="this.removeAttribute('readonly');"

girişler için bunları form verilerini (hatırlamak istemediklerini username, passwordaşağıda gösterildiği gibi, vs.):

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

Bu yardımcı olur umarım.


1
IE11'de benim için, onfocus salt okunur özniteliği kaldırdıktan sonra bile metin kutusuna yazamıyorum. Ancak, metin kutusuna ikinci kez tıklarsam yazabilirim.
mcallahan

IE11 ile aynı sorunla karşılaştım (ikinci odaklanana kadar yazamıyorum). Bulanıklık eklemek ve sonra tekrar odaklanmak işe yarar. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
palmsey

@Andrew Tabii ki yapabilirsin. Bu, bu sorunun üstesinden gelmek için temel ilkedir ve ayrıca tam kod örneği içeren bir güncelleme ekledim;)
Murat Yıldız

Ayrıca ekledimonfocusout="this.setAttribute('readonly', 'readonly');"
rinatdobr

16

En iyi çözüm:

Otomatik tamamlama kullanıcı adını (veya e-postasını) ve şifreyi önleyin:

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

Bir alanın otomatik tamamlanmasını önleme:

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

Açıklama: autocompleteçalışmaya devam eder <input>, autocomplete="off"çalışmaz, ancak offrastgele bir dizeye değiştirebilirsiniz nope.

Çalıştığı yerler:

  • Krom: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 ve 64

  • Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 ve 58


2
Bunu ön testlerimde buldum. O kadar tuhaf ki "kapalı" çalışmıyor.
Craig Jacobs

Bu, Android'de Chrome için çalışmaz. autocompleteÖznitelik için dize değerleri ayarlamayı denedim ve hala giriş altında otomatik tamamlama önerileri olarak önceki girişleri görüntüler.
tebs1200

@ tebs1200 Hangisi? Parola alanı veya metin alanı?
Cava

@Cava geciken yanıt için özür dileriz. Metin alanı. Hangi değere ayarladığım önemli değil autocomplete, yine de önceden girilen değerlere dayalı bir öneri açılır listesi alıyorum . Masaüstünde iyi, ancak Android chrome'da iyi değil.
tebs1200

14

Oyuna biraz geç ... ama ben sadece bu problemle karşılaştım ve birkaç başarısızlık denedim, ama bu benim için işe yaradı MDN'de bulundu

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 zorlamanın hilesi, özniteliğe rastgele bir dize atamaktır:

autocomplete="nope"

13

Ekleme

autocomplete="off"

form etiketi, tarayıcı otomatik tamamlamasını (daha önce bu alana yazılanlar) inputsöz konusu formdaki tüm alanlardan devre dışı bırakır .

Test tarihi:

  • Firefox 3.5, 4 BETA
  • Internet Explorer 8
  • Krom

13

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.


4
Bu bir hack. Alan bir arama alanı değildir. Gelecekte bu sorunlara neden olabilir.
Roel

12

Alanlar için standart olmayan bir ad ve kimlik kullanın, böylece "ad" yerine "ad_" olsun. Tarayıcılar bu durumda ad alanı olarak görülmez. Bununla ilgili en iyi bölüm, bunu tüm alanlara değil bazı alanlara yapabilmeniz ve bazı alanların tümünü değil bazılarını otomatik olarak tamamlamasıdır.


Bu sorun başka herhangi bir site aynı hedefe ulaşmak için "name_" kullanırsa o zaman bir kare geri.
ConroyP

3
bu yüzden "sitem_adı" yap. Başka biri bunu kullanıyorsa, onlara sorular
sorardım

bu otomatik
doldurma

12

Geçersiz XHTML'yi önlemek için, javascript kullanarak bu özelliği ayarlayabilirsiniz. JQuery kullanılan örnek:

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

Sorun, javascript içermeyen kullanıcıların otomatik tamamlama işlevini almalarıdır.


38
bu geçersiz xhtml'den kaçınmaz, kontrol ettikten sonra geçersiz biti dinamik olarak ekler, geçerli olduğunu beyan eder!
Andiih

@Andiih: Otomatik tamamlamanın xhtml'de çalışmasının bir yolu var mı?
cherouvim

1
Çalışın (veya amaç olan çalışmayı durdurun): evet yukarıdaki gibi. Ama geçerli - hayır.
Andiih

11

eğer autocomplete="off"işe yaramazsa bunları da deneyin :

autocorrect="off" autocapitalize="off" autocomplete="off"

11

Rapor edildikten çok sonra bunun hala bir sorun olduğuna inanamıyorum. Yukarıdaki çözümler benim için işe yaramadı, çünkü safari öğenin ne zaman görüntülenmediğini veya ekran dışında olduğunu biliyor gibi göründü, ancak aşağıdakiler benim için çalıştı:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

Umarım bu birisi için faydalıdır!


1
Peki, gerçek kullanıcı adı ve şifre alanlarından önce bunu koymak çalıştı? tarayıcı gerçekleri değil, bunları doldurdu
Andrew

11

İşte burada:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">


1
Görünen parolanın yanıp sönmesini önlemek için stil metin kutuları varsa iyi bir fikir gibi görünüyor.
Andrew

1
Çok teşekkürler, bu iş +1 yaptı, çözümünüzdeki varyasyonum tek satırlık yapmaktı: <input oninput = "this.type = 'password'" id = "inputpassword" type = "text">
Hasnaa Ibraheem

@HasnaaIbraheem Teşekkürler (: bazen daha okunabilir daha iyidir.
Stav Bodik

11

Bu, tarayıcıların artık yoksaydığı bir güvenlik sorunudur. Geliştiriciler bilginin hassas olduğunu ve saklanmaması gerektiğini düşünüyor olsalar da tarayıcılar içeriği girdi adlarını kullanarak tanımlar ve saklar. Bir giriş adının 2 istek arasında farklı yapılması sorunu çözer (ancak yine de tarayıcının önbelleğine kaydedilir ve ayrıca tarayıcının önbelleğini de artırır). Kullanıcıdan tarayıcı ayarlarındaki seçenekleri etkinleştirmesini veya devre dışı bırakmasını isteyin iyi bir çözüm değildir. Sorun arka uçta düzeltilebilir.

İşte benim düzeltmem. Çerçevemde uyguladığım bir yaklaşım. Tüm otomatik tamamlama öğeleri aşağıdaki gibi gizli bir girişle oluşturulur:

<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<? echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

Sunucu daha sonra şöyle değişkenleri işler:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

Değer her zamanki gibi erişilebilir

var_dump($_POST['username']);

Ve tarayıcı önceki istekten veya önceki kullanıcılardan bilgi öneremez.

Tarayıcılar güncelleştirilse bile, hepsi otomatik tamamlamayı yoksaymak ya da atmak istemez gibi bir cazibe gibi çalışır. Sorunu benim için düzeltmenin en iyi yolu bu oldu.


10

Burada bahsedilen hack'lerin hiçbiri Chrome'da benim için çalışmadı. Burada sorunla ilgili bir tartışma var: https://code.google.com/p/chromium/issues/detail?id=468153#c41

Bunu bir <form>eserin içine eklemek (en azından şimdilik):

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

1
Bu tekniği kullanarak, FireFox hala formu gönderirken dahil edilecek gizli alanı otomatik olarak dolduracaktır. Parola güvenli olmayan bir bağlantı üzerinden aktarılacağı için bu muhtemelen kötü olur. Neyse ki eklemek maxlength="0"firefox'un alanı otomatik olarak doldurmasını engelliyor.
Mikal Schacht Jensen

9

Girişte kullanabilirsiniz.

Örneğin;

<input type=text name="test" autocomplete="off" />
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.