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=passwordpolem. 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:noneoznaczają, ż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"