Podczas korzystania z xhtml1-transitional.dtd
doctype, zbieranie numeru karty kredytowej z następującym kodem HTML
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
oznaczy ostrzeżenie na walidatorze W3C:
nie ma atrybutu „autouzupełnianie”.
Czy istnieje sposób W3C / standardy, aby wyłączyć automatyczne uzupełnianie przeglądarki w poufnych polach w formularzu?
Odpowiedzi:
Oto dobry artykuł z MDC, w którym wyjaśniono problemy (i rozwiązania) związane z autouzupełnianiem. Microsoft opublikował tutaj również coś podobnego .
Szczerze mówiąc, jeśli jest to coś ważnego dla użytkowników, „łamanie” w ten sposób standardów wydaje się właściwe. Na przykład Amazon dość często używa atrybutu „autouzupełniania” i wydaje się, że działa dobrze.
Jeśli chcesz całkowicie usunąć to ostrzeżenie, możesz użyć JavaScript, aby zastosować atrybut do przeglądarek, które go obsługują (IE i Firefox są ważnymi przeglądarkami) przy użyciu
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
Wreszcie, jeśli Twoja witryna korzysta z HTTPS, IE automatycznie wyłącza autouzupełnianie (podobnie jak niektóre inne przeglądarki, o ile mi wiadomo).
Aktualizacja
Ponieważ ta odpowiedź wciąż zyskuje sporo pozytywnych opinii, chciałem tylko zauważyć, że w HTML5 można użyć atrybutu „autouzupełniania” w elemencie formularza. Zobacz dokumentację W3C.
źródło
autocomplete
może być użyte nie tylko naform
elemencie , aoff
wartość działa przynajmniej wchromium-40.0.2214.115
Byłbym bardzo zaskoczony, gdyby W3C zaproponował sposób, który działałby z (X) HTML4. Funkcja autouzupełniania jest całkowicie oparta na przeglądarce i została wprowadzona w ciągu ostatnich lat (długo po napisaniu standardu HTML4).
Nie zdziwiłoby się jednak, gdyby HTML5 miał taki.
Edit: Tak jak myślałem, HTML5 nie mają tej funkcji. Aby zdefiniować stronę jako HTML5, użyj następującego typu dokumentu (tj. Umieść to jako pierwszy tekst w kodzie źródłowym). Pamiętaj, że nie wszystkie przeglądarki obsługują ten standard, ponieważ wciąż jest w wersji roboczej.
źródło
HTML 4 : Nie
HTML 5 : Tak
Odniesienie: W3
źródło
Nie, ale automatyczne uzupełnianie przeglądarki jest często wywoływane przez pole mające ten sam
name
atrybut co pola, które zostały wcześniej wypełnione. Jeśli potrafisz opracować sprytny sposób uzyskania losowej nazwy pola , funkcja autouzupełniania nie byłaby w stanie pobrać wcześniej wprowadzonych wartości dla pola.Jeśli nadasz polu wejściowemu nazwę typu „
email_<?= randomNumber() ?>
”, a następnie skrypt, który odbierze tę pętlę danych przez zmienne POST lub GET, szukając czegoś pasującego do wzorca „email_[some number]
”, możesz to zrobić, a to miałoby ( praktycznie) gwarantowany sukces, niezależnie od przeglądarki .źródło
Nie, dobry artykuł jest tutaj na Mozila Wiki .
Nadal będę używać nieprawidłowego
attribute
. Myślę, że tutaj pragmatyzm powinien wygrać z walidacją.źródło
Co powiesz na ustawienie go w JavaScript?
To nie jest idealne, ale Twój HTML będzie ważny.
źródło
Sugeruję złapanie wszystkich 4 typów danych wejściowych:
Odniesienie:
źródło
:input
równieżJeśli używasz jQuery, możesz zrobić coś takiego:
i użyj klasy autocompleteOff, gdzie chcesz:
Jeśli chcesz, aby WSZYSTKIE twoje dane wejściowe były
autocomplete=off
, możesz po prostu użyć tego:źródło
autocomplete
atrybut w inny sposób niż w HTML$('input.autocompleteOff').val('');
co wydaje się OK.Innym sposobem - który pomoże również w bezpieczeństwie, jest wywoływanie pola wprowadzania danych za każdym razem, gdy jest wyświetlane, coś innego: zupełnie jak captha. W ten sposób sesja może odczytać dane jednorazowe, a funkcja autouzupełniania nie będzie działać.
Tylko kwestia dotycząca pytania rmeadora o to, czy powinieneś ingerować w przeglądarkę: opracowujemy systemy zarządzania kontaktami i CRM, a kiedy wpisujesz dane innych osób w formie, nie chcesz, aby stale sugerowała twoje dane.
Działa to na nasze potrzeby, ale mamy luksus, mówiąc użytkownikom, aby otrzymali przyzwoitą przeglądarkę :)
źródło
autocomplete="off"
powinno to rozwiązać problem wszystkich współczesnych przeglądarek.W aktualnych wersjach przeglądarek Gecko atrybut autouzupełniania działa idealnie. We wcześniejszych wersjach, wracając do Netscape 6.2, działał z wyjątkiem formularzy z „Adres” i „Nazwa”
Aktualizacja
W niektórych przypadkach przeglądarka będzie sugerować wartości autouzupełniania, nawet jeśli atrybut autouzupełniania jest wyłączony. To nieoczekiwane zachowanie może być dość zagadkowe dla programistów. Sztuką naprawdę wymuszającą brak autouzupełniania jest przypisanie losowego ciągu do atrybutu , na przykład:
Ponieważ ta losowa wartość nie jest a
valid one
, przeglądarka zrezygnuje.Dokumentacja
źródło
Użycie losowego atrybutu „nazwa” działa dla mnie.
Resetuję atrybut name podczas wysyłania formularza, aby nadal można było uzyskać do niego dostęp po nazwie, gdy formularz jest wysyłany. (używanie atrybutu id do przechowywania nazwy)
źródło
Zauważ, że istnieje pewne zamieszanie co do lokalizacji atrybutu autouzupełniania. Można go zastosować do całego tagu FORM lub do pojedynczych tagów INPUT, a tak naprawdę nie był on znormalizowany przed HTML5 (który wyraźnie dopuszcza obie lokalizacje ). Starsze dokumenty, w szczególności ten artykuł Mozilli, wspominają tylko o znaczniku FORM. Jednocześnie niektóre skanery bezpieczeństwa będą szukały autouzupełniania tylko w znaczniku INPUT i narzekają, jeśli go brakuje (nawet jeśli jest on w FORMULARZU nadrzędnym). Bardziej szczegółowa analiza tego bałaganu jest opublikowana tutaj: zamieszanie w zakresie atrybutów AUTOCOMPLETE = OFF w formularzach HTML .
źródło
Nie jest to idealne rozwiązanie, ale możesz zmieniać identyfikator i nazwę pola tekstowego za każdym razem, gdy go renderujesz - musisz śledzić go także po stronie serwera, aby uzyskać dane.
Nie jestem pewien, czy to zadziała, czy nie, to tylko myśl.
źródło
Myślę, że jest prostszy sposób. Utwórz ukryte dane wejściowe o losowej nazwie (przez javascript) i ustaw na to nazwę użytkownika. Powtórz z hasłem. W ten sposób skrypt zaplecza dokładnie wie, jaka jest odpowiednia nazwa pola, jednocześnie utrzymując autouzupełnianie w ciemności.
Prawdopodobnie się mylę, ale to tylko pomysł.
źródło
źródło
To rozwiązanie działa ze mną:
jeśli chcesz użyć autouzupełniania w tym regionie: dodaj
autocomplete="false"
element ex:źródło
Prawidłowe autouzupełnianie wyłączone
źródło