Właśnie odkryłem, że jeśli pamiętasz nazwę użytkownika i hasło do witryny, bieżąca wersja Chrome automatycznie wypełni Twoją nazwę użytkownika / adres e-mail w polu przed dowolnym type=password
polem. Nie ma znaczenia, jak nazywa się to pole - po prostu zakłada to pole, zanim hasło stanie się Twoją nazwą użytkownika.
Stare rozwiązanie
Wystarczy użyć <form autocomplete="off">
i zapobiega to wpisywaniu hasła, a także heurystycznemu wypełnianiu pól w oparciu o założenia przeglądarki (które często są błędne). W przeciwieństwie do używania, <input autocomplete="off">
które wydaje się być prawie ignorowane przez autouzupełnianie hasła (w Chrome to znaczy Firefox go wypełnia).
Zaktualizowane rozwiązanie
Chrome teraz ignoruje <form autocomplete="off">
. Dlatego moje oryginalne obejście (które usunąłem) jest teraz modne.
Wystarczy utworzyć kilka pól i ukryć je za pomocą „display: none”. Przykład:
<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>
Następnie umieść pod sobą swoje prawdziwe pola.
Pamiętaj, aby dodać komentarz lub inne osoby w twoim zespole będą się zastanawiać, co robisz!
Aktualizacja z marca 2016 r
Właśnie przetestowane z najnowszym Chrome - wszystko dobrze. To dość stara odpowiedź, ale chcę tylko wspomnieć, że nasz zespół stosuje ją od lat w dziesiątkach projektów. Nadal działa świetnie, pomimo kilku poniższych komentarzy. Nie ma problemów z dostępnością, ponieważ pola display:none
oznaczają, że nie są one aktywne. Jak wspomniałem, musisz postawić je przed swoimi prawdziwymi polami.
Jeśli używasz javascript do modyfikowania formularza, będziesz potrzebować dodatkowej sztuczki. Pokaż fałszywe pola podczas manipulowania formularzem, a następnie ukryj je ponownie milisekundę później.
Przykładowy kod wykorzystujący jQuery (zakładając, że nadajesz fałszywym polom klasę):
$(".fake-autofill-fields").show();
// some DOM manipulation/ajax here
window.setTimeout(function () {
$(".fake-autofill-fields").hide();
},1);
Zaktualizuj lipiec 2018 r
Moje rozwiązanie nie działa już tak dobrze, ponieważ eksperci od Chrome w zakresie przeciwdziałania usability ciężko pracowali. Ale rzucili nam kość w postaci:
<input type="password" name="whatever" autocomplete="new-password" />
To działa i głównie rozwiązuje problem.
Jednak to nie działa, gdy nie masz pola hasła, a tylko adres e-mail. Może to być również trudne, aby przestał żółknąć i napełniał się. Aby to naprawić, można użyć rozwiązania fałszywych pól.
W rzeczywistości czasami musisz wpaść w dwie partie fałszywych pól i wypróbować je w różnych miejscach. Na przykład miałem już fałszywe pola na początku formularza, ale Chrome niedawno zaczął ponownie wypełniać moje pole „E-mail” - więc wtedy podwoiłem liczbę i wstawiłem więcej fałszywych pól tuż przed polem „E-mail”, i to naprawiło . Usunięcie pierwszej lub drugiej partii pól powoduje powrót do nieprawidłowego nadgorliwego autouzupełniania.
Aktualizacja z marca 2020 r
Nie jest jasne, czy i kiedy to rozwiązanie nadal działa. Wydaje się, że wciąż działa, ale nie cały czas.
W komentarzach poniżej znajdziesz kilka wskazówek. Jeden dodany właśnie przez @anilyeni może być wart dalszego zbadania:
Jak zauważyłem, autocomplete="off"
działa na Chrome 80, JEŚLI jest mniej niż 3 elementy <form>
. Nie wiem, jaka jest logika ani gdzie jest związana z nią dokumentacja.
Również ten z @dubrox może być odpowiedni, chociaż go nie testowałem:
wielkie dzięki za podstęp, ale proszę zaktualizuj odpowiedź, ponieważ display:none;
już nie działa, ale position: fixed;top:-100px;left:-100px; width:5px;
działa :)
Zaktualizuj KWIECIEŃ 2020
Specjalną wartością dla chrome dla tego atrybutu jest wykonywanie pracy: (testowane na wejściu - ale nie przeze mnie)
autocomplete="chrome-off"