Stworzyłem aplikację internetową, która korzysta z rozwijanego pola tagbox. Działa to doskonale we wszystkich przeglądarkach oprócz przeglądarki Chrome (wersja 21.0.1180.89).
Pomimo obu input
pól ORAZ form
pola mającego autocomplete="off"
atrybut, Chrome nalega na wyświetlenie rozwijanej historii poprzednich wpisów dla pola, co powoduje zatarcie listy tagbox.
html
google-chrome
autocomplete
forms
Pan Fett
źródło
źródło
Odpowiedzi:
AKTUALIZACJA
Wygląda na to, że teraz Chrome ignoruje atrybuty
style="display: none;"
lubstyle="visibility: hidden;
.Możesz to zmienić na coś takiego:
Z mojego doświadczenia wynika, że Chrome automatycznie uzupełnia tylko pierwszy
<input type="password">
i poprzedni<input>
. Więc dodałem:Do góry
<form>
i sprawa została rozwiązana.źródło
display: none;
zniknie element, nic o autouzupełnianiu.Zapobiegaj autouzupełnianiu nazwy użytkownika (lub adresu e-mail) i hasła:
Zapobiegaj autouzupełnianiu pola ( może nie działać ):
Wyjaśnienie:
autocomplete
nadal działa na<input>
mimoautocomplete="off"
, ale możesz zmienićoff
na losowy ciąg, npnope
.Inne „rozwiązania” dla wyłączania autouzupełniania pola (nie jest to właściwy sposób, ale działa):
1.
HTML:
JS (obciążenie):
lub używając jQuery:
2)
HTML:
JS (obciążenie):
lub używając jQuery:
Aby dodać więcej niż jedno pole za pomocą jQuery:
Pracuje w:
Chrome: 49+
Firefox: 44+
źródło
new-password
jest dobrym haczykiem dla każdego ukrytego wejścia, które tak naprawdę nie jest hasłem, dziękiautocomplete="nope"
faktycznie dla mnie pracował, chyba że dodam go do obu pól formularza. Jakbym mógł mieć go na jednym polu, a wtedy to pole nie będzie autouzupełniania, ale drugie pole będzie nadal autouzupełniania, ale gdy tylko umieściłem je na obu polach, oba z nich ponownie zaczynają się autouzupełniać.Wygląda na to, że Chrome teraz ignoruje,
autocomplete="off"
chyba że jest na<form autocomplete="off">
tagu.źródło
Nowoczesne podejście
Po prostu wprowadź dane wejściowe
readonly
i, na miejscu, usuń je. Jest to bardzo proste podejście, a przeglądarki nie zapełniająreadonly
danych wejściowych. Dlatego ta metoda jest akceptowana i nigdy nie zostanie zastąpiona przez przyszłe aktualizacje przeglądarki.Następna część jest opcjonalna. Styluj odpowiednio swoje dane wejściowe, aby nie wyglądały jak dane
readonly
wejściowe.PRZYKŁAD PRACY
źródło
modern approach
. Mniej niż 1% użytkowników na świecie ma wyłączony Javascript. Tak szczerze mówiąc, nie warto nikomu poświęcać czasu dla tak małej grupy odbiorców, gdy znaczna większość stron internetowych korzysta z Javascript. Od bardzo dawna rozwijam strony internetowe, a 100% moich stron korzysta z Javascript i mocno na nim polega. Jeśli użytkownicy mają wyłączony Javascript, jest to ich problem i wybór, a nie mój. Nie będą mogli odwiedzać ani korzystać z co najmniej 90% stron internetowych z wyłączoną funkcją ... Twoja opinia jest całkowicie nieistotna.Aby uzyskać niezawodne obejście, możesz dodać ten kod do strony układu:
Chrome uznaje autouzupełnianie = wyłączone tylko wtedy, gdy w formularzu jest co najmniej jeden inny element wejściowy z dowolną inną wartością autouzupełniania.
To nie będzie działać z polami haseł - w Chrome są one obsługiwane inaczej. Zobacz https://code.google.com/p/chromium/issues/detail?id=468153 więcej szczegółów.
AKTUALIZACJA: Błąd zamknięty jako „Won't Fix” przez Chromium Team 11 marca 2016 r. Zobacz ostatni komentarz w moim pierwotnie złożonym raporcie o błędzie , aby uzyskać pełne wyjaśnienie. TL; DR: użyj semantycznych atrybutów autouzupełniania, takich jak autouzupełnianie = „new-street-address”, aby uniknąć autouzupełniania w Chrome.
źródło
Cóż, trochę późno na imprezę, ale wydaje się, że jest trochę nieporozumień na temat tego, jak
autocomplete
powinno i nie powinno działać. Zgodnie ze specyfikacjami HTML klient użytkownika (w tym przypadku Chrome) może zastąpićautocomplete
:https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Dlatego w przypadku Chrome programiści zasadniczo powiedzieli: „pozostawimy to użytkownikowi, aby zdecydował w swoich preferencjach, czy chce
autocomplete
pracować, czy nie. Jeśli nie chcesz, nie włączaj go w przeglądarce” .Wydaje się jednak, że z mojej strony jest to trochę nadgorliwe, ale tak właśnie jest. W specyfikacji omówiono również potencjalne konsekwencje takiego ruchu dla bezpieczeństwa:
Po doświadczeniu takiej samej frustracji jak wszyscy inni znalazłem rozwiązanie, które działa dla mnie. Podobnie jest w przypadku
autocomplete="false"
odpowiedzi.Artykuł w Mozilli mówi dokładnie o tym problemie:
https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
Więc następujący kod powinien działać:
Podobnie powinno być każde z poniższych:
Widzę problem polegający na tym, że agent przeglądarki może być wystarczająco inteligentny, aby nauczyć się
autocomplete
atrybutu i zastosować go przy następnym wyświetleniu formularza. Jeśli tak się stanie, jedynym sposobem na obejście problemu jest dynamiczna zmianaautocomplete
wartości atrybutu podczas generowania strony.Warto wspomnieć, że wiele przeglądarek ignoruje
autocomplete
ustawienia pól logowania (nazwa użytkownika i hasło). Jak stwierdza artykuł Mozilli:Na koniec mała informacja o tym, czy atrybut należy do
form
elementu czyinput
elementu. Specyfikacja ponownie ma odpowiedź:Więc. Umieszczenie go w formularzu powinno mieć zastosowanie do wszystkich pól wejściowych. Umieszczenie go na pojedynczym elemencie powinno dotyczyć tylko tego elementu (nawet jeśli nie ma go w formularzu). Jeśli
autocomplete
w ogóle nie jest ustawiony, domyślnie jest ustawiony naon
.Podsumowanie
Aby wyłączyć
autocomplete
w całym formularzu:Lub jeśli musisz to zrobić dynamicznie:
Aby wyłączyć
autocomplete
pojedynczy element (niezależnie od tego, czy ustawienie formularza jest obecne, czy nie)Lub jeśli musisz to zrobić dynamicznie:
I pamiętaj, że niektóre programy użytkownika mogą zastąpić nawet najcięższe próby wyłączenia
autocomplete
.źródło
Obecnie rozwiązaniem jest użycie
type="search"
. Google nie stosuje autouzupełniania do danych wejściowych z rodzajem wyszukiwania.Zobacz: https://twitter.com/Paul_Kinlan/status/596613148985171968
Aktualizacja 04.04.2016: Wygląda na to, że to naprawiono! Zobacz http://codereview.chromium.org/1473733008
źródło
Wersja Chrome 34 teraz ignoruje
autocomplete=off
, zobacz to .Dużo dyskusji na temat tego, czy jest to dobra czy zła rzecz? Jakie są twoje poglądy?
źródło
Przeglądarka nie dba o autouzupełnianie = wyłącza auto, a nawet wypełnia dane logowania do złego pola tekstowego?
Naprawiłem to, ustawiając pole hasła na „tylko do odczytu” i aktywowałem je, gdy użytkownik na nie kliknie lub użyje klawisza Tab do tego pola.
napraw autouzupełnianie przeglądarki: tylko do odczytu i ustaw ostrość na zapisywalny (po kliknięciu myszą i tabulacji przez pola)
Aktualizacja: Mobile Safari ustawia kursor w polu, ale nie wyświetla wirtualnej klawiatury. Nowa poprawka działa jak poprzednio, ale obsługuje wirtualną klawiaturę:
Demo na żywo https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
Nawiasem mówiąc, więcej informacji na temat mojej obserwacji:
Czasami zauważam to dziwne zachowanie w Chrome i Safari, gdy pola hasła są w tej samej formie. Myślę, że przeglądarka szuka pola hasła, aby wstawić zapisane poświadczenia. Następnie automatycznie uzupełnia nazwę użytkownika do najbliższego pola tekstowego, które pojawia się przed polem hasła w DOM (zgaduję z powodu obserwacji). Ponieważ przeglądarka jest ostatnią instancją i nie można jej kontrolować, czasami nawet autouzupełnianie = wyłączone nie uniemożliwiłoby wypełnienia poświadczeń w złych polach, ale nie w polu użytkownika lub pseudonimu.
źródło
Możesz użyć
autocomplete="new-password"
Pracuje w:
źródło
TL; DR: Powiedz Chrome, że jest to nowe hasło i nie dostarczy starych jako autouzupełniania sugestii:
autocomplete="off"
nie działa z powodu decyzji projektowej - wiele badań pokazuje, że użytkownicy mają znacznie dłuższe i trudniejsze do zhakowania hasła, jeśli mogą je przechowywać w przeglądarce lub menedżerze haseł.Specyfikacja
autocomplete
zmieniła się i obsługuje różne wartości, aby formularze logowania były łatwe do automatycznego wypełniania:Jeśli nie podasz, Chrome nadal próbuje zgadywać, a kiedy to robi, ignoruje
autocomplete="off"
.Rozwiązaniem jest to, że
autocomplete
istnieją również wartości formularzy resetowania hasła:Możesz użyć tej
autocomplete="new-password"
flagi, aby Chrome nie zgadywał hasła, nawet jeśli jest ono zapisane dla tej witryny.Chrome może również zarządzać hasłami do witryn bezpośrednio przy użyciu interfejsu API poświadczeń , który jest standardem i prawdopodobnie będzie miał ostatecznie uniwersalną obsługę.
źródło
Rozwiązałem niekończącą się walkę z Google Chrome przy użyciu losowych postaci. Kiedy zawsze renderujesz autouzupełnianie za pomocą losowego ciągu, nigdy niczego nie zapamięta.
Mam nadzieję, że pomoże to innym ludziom.
źródło
Autocomplete="Off"
już nie działa.Spróbuj użyć tylko losowy ciąg zamiast
"Off"
, na przykładAutocomplete="NoAutocomplete"
Mam nadzieję, że to pomoże.
źródło
Widziany chrom ignoruje
autocomplete="off"
, rozwiązuję go głupio, używając „fałszywych danych wejściowych” do oszukiwania chromu w celu wypełnienia go zamiast wypełniania „prawdziwego”.Przykład:
Chrome wypełni „fałszywe dane wejściowe”, a po przesłaniu serwer przyjmie wartość „rzeczywistych danych wejściowych”.
źródło
Publikuję tę odpowiedź, aby zaktualizować rozwiązanie tego problemu. Obecnie używam Chrome 49 i żadna podana odpowiedź nie działa w tym przypadku. Szukam również rozwiązania współpracującego z innymi przeglądarkami i poprzednimi wersjami.
Umieść ten kod na początku formularza
Następnie w polu prawdziwego hasła użyj
Skomentuj tę odpowiedź, jeśli nie działa lub jeśli masz problem z inną przeglądarką lub wersją.
Zatwierdzony w dniu:
źródło
każdemu, kto szuka rozwiązania tego problemu, w końcu to rozgryzłem.
Chrome jest zgodny z autocomplete = "off" tylko, jeśli strona jest stroną HTML5 (korzystałem z XHTML).
Po przekonwertowaniu strony na HTML5 problem zniknął (facepalm).
źródło
Zmień atrybut typu danych wejściowych na
type="search"
.Google nie stosuje automatycznego wypełniania do danych wejściowych z rodzajem wyszukiwania.
źródło
Aż do zeszłego tygodnia dwa poniższe rozwiązania wydawały się działać w Chrome, IE i Firefox. Ale wraz z wydaniem przeglądarki Chrome w wersji 48 (i wciąż w wersji 49) przestają działać:
W elemencie wprowadzania hasła:
autocomplete = "wyłączony"
Aby to szybko naprawić, najpierw próbowałem użyć znacznego hackowania, początkowo ustawiając element wejściowy hasła na wyłączony, a następnie użyłem setTimeout w funkcji gotowości dokumentu, aby włączyć go ponownie.
Ale to wydawało się takie szalone i szukałem więcej i znalazłem odpowiedź @tibalts w Wyłączanie autouzupełniania Chrome . Jego odpowiedzią jest użycie autocomplete = "new-password" w danych wejściowych haseł i wydaje się, że działa to we wszystkich przeglądarkach (na tym etapie trzymałem moją poprawkę nr 1 powyżej).
Oto link w dyskusji programisty Google Chrome: https://code.google.com/p/chromium/issues/detail?id=370363#c7
źródło
autocomplete=off
jest w dużej mierze ignorowany w nowoczesnych przeglądarkach - głównie ze względu na menedżerów haseł itp.Możesz spróbować dodać to
autocomplete="new-password"
nie jest w pełni obsługiwane przez wszystkie przeglądarki, ale działa na niektórychźródło
autocomplete="off"
zwykle działa, ale nie zawsze. To zależyname
od pola wejściowego. Nazwy takie jak „adres”, „e-mail”, „nazwa” - będą uzupełniane automatycznie (przeglądarki uważają, że pomagają użytkownikom), gdy pola takie jak „kod”, „kod PIN” - nie będą wypełniane automatycznie (jeśliautocomplete="off"
jest ustawione)Moje problemy polegały na tym, że autouzupełnianie zadzierało z pomocnikiem adresu google
Naprawiłem to, zmieniając nazwę
od
do
Testowane w chromie 71.
źródło
Zamiast autocomplete = "off" użyj autocomplete = "false" ;)
od: https://stackoverflow.com/a/29582380/75799
źródło
Nie mam pojęcia, dlaczego to zadziałało w moim przypadku, ale na Chrome użyłem,
autocomplete="none"
a Chrome przestał sugerować adresy dla mojego pola tekstowego.źródło
Począwszy od Chrome 42, żadne z rozwiązań / hacków w tym wątku (jak na razie
2015-05-21T12:50:23+00:00
) nie działa w celu wyłączenia autouzupełniania dla pojedynczego pola lub całego formularza.EDYCJA: Odkryłem, że w rzeczywistości wystarczy wstawić tylko jedno fikcyjne pole e-mail do formularza (możesz je ukryć
display: none
) przed innymi polami, aby zapobiec autouzupełnianiu. Zakładam, że chrome przechowuje jakiś podpis formularza w każdym polu autouzupełniania, a dołączenie innego pola e-mailu uszkadza ten podpis i zapobiega autouzupełnianiu.Dobra wiadomość jest taka, że ponieważ „podpis formularza” jest przez to uszkodzony, żadne z pól nie jest wypełniane automatycznie, więc JS nie jest potrzebny do wyczyszczenia fałszywych pól przed przesłaniem.
Stara odpowiedź:
Jedyne, co uważam za nadal wykonalne, to wstawienie dwóch fałszywych pól typu e-mail i hasła przed prawdziwymi polami. Możesz ustawić je tak,
display: none
aby je ukrywały (nie jest wystarczająco inteligentne, aby zignorować te pola):Niestety pola muszą znajdować się w formularzu (w przeciwnym razie oba zestawy danych wejściowych są wypełniane automatycznie). Tak więc, aby fałszywe pola zostały naprawdę zignorowane, będziesz potrzebować trochę JS do uruchomienia formularza, aby je wyczyścić:
Zwróć uwagę, że wyczyszczenie wartości za pomocą Javascript działa w celu zastąpienia autouzupełniania. Jeśli więc utrata prawidłowego zachowania przy wyłączonym JS jest akceptowalna, możesz to wszystko uprościć dzięki autouzupełnianiu JS „polyfill” dla Chrome:
źródło
Miałem podobny problem, w którym pole wejściowe zawierało nazwę lub adres e-mail. Ustawiłem autocomplete = "off", ale Chrome wciąż wymusza sugestie. Okazuje się, że było tak, ponieważ tekst zastępczy zawierał słowa „nazwa” i „e-mail”.
Na przykład
Obejrzałem to, umieszczając spację o zerowej szerokości w słowach w symbolu zastępczym. Nigdy więcej autouzupełniania Chrome.
źródło
W Chrome 48+ użyj tego rozwiązania:
Umieść fałszywe pola przed prawdziwymi polami:
Ukryj fałszywe pola:
Zrobiłeś to!
Działa to również w przypadku starszych wersji.
źródło
autocomplete="off"
naform
tagu. Spróbuj także umieścić fałszywe dane wejściowe natychmiast poform
tagu.Po chrom v. 34, zachodzącego
autocomplete="off"
w<form>
tagu pracy doesn `Wprowadziłem zmiany, aby uniknąć tego irytującego zachowania:
name
iid
z hasłapasswordInput
)(Jak dotąd Chrome nie umieszcza zapisanego hasła na danych wejściowych, ale formularz jest teraz uszkodzony)
Na koniec, aby formularz działał, uruchom ten kod, aby użytkownik uruchomił się, gdy użytkownik kliknie przycisk wysyłania lub gdy chcesz uruchomić wysyłanie formularza:
W moim przypadku miałem hav
id="password" name="password"
wprowadzałem hasło, więc odkładałem je z powrotem przed uruchomieniem przesyłania.źródło
Po wypróbowaniu wszystkich rozwiązań, oto, co wydaje się działać dla wersji chrome: 45, z formularzem posiadającym pole hasła:
źródło
Właśnie zaktualizowałem Chrome 49 i rozwiązanie Diogo Cid już nie działa.
Wprowadziłem inne obejście, ukrywając i usuwając pola w czasie wykonywania po załadowaniu strony.
Chrome teraz ignoruje oryginalne obejście, które stosuje poświadczenia do pierwszego wyświetlanego
type="password"
pola i jego poprzedniegotype="text"
pola, więc ukryłem oba pola za pomocą CSSvisibility: hidden;
Wiem, że to może nie wydawać się zbyt eleganckie, ale działa.
źródło
uznałem to rozwiązanie za najbardziej odpowiednie:
Musi zostać załadowany po dom gotowy lub po renderowaniu formularza.
źródło
Chociaż zgadzam się, że autouzupełnianie powinno być wyborem użytkownika, są chwile, kiedy Chrome jest nadmiernie gorliwy (inne przeglądarki też mogą być). Na przykład pole hasła o innej nazwie jest nadal automatycznie wypełniane zapisanym hasłem, a poprzednie pole jest wypełniane nazwą użytkownika. Jest to szczególnie bolesne, gdy formularz jest formularzem do zarządzania użytkownikami dla aplikacji sieci web i nie chcesz, aby funkcja autouzupełniania wypełniła ją własnymi poświadczeniami.
Chrome całkowicie teraz ignoruje autouzupełnianie = „wyłączone”. Podczas gdy hacki JS mogą dobrze działać, znalazłem prosty sposób, który działa w momencie pisania:
Ustaw wartość pola hasła na znak sterujący 8 (
"\x08"
w PHP lub
HTML). Powoduje to, że Chrome nie wypełnia automatycznie pola, ponieważ ma ono wartość, ale nie wprowadzono żadnej wartości rzeczywistej, ponieważ jest to znak cofania.Tak, to wciąż hack, ale działa dla mnie. YMMV.
źródło
form
do tworzenia nowych i edytowania istniejących użytkowników, po prostu przesłaniającinput
wartości za pomocą JS usunąłem autouzupełnianie.