Вимкнення автоматичного заповнення Chrome


620

Я стикався з проблемами хронічної поведінки автозаповнення в декількох формах.

Усі поля у формі мають дуже поширені та точні імена, наприклад "електронна пошта", "ім'я" або "пароль", і вони також autocomplete="off"встановлені.

Прапор автозаповнення успішно відключив поведінку автозаповнення, коли спадне значення з’являється під час введення тексту, але не змінило значення, якими Chrome автоматично заповнює поля.

Така поведінка була б нормальною, за винятком того, що хром заповнює вводи неправильно, наприклад, заповнюючи вхід телефону електронною адресою. Клієнти скаржилися на це, тому це перевірено, що це відбувається в декількох випадках, а не як якийсь результат до чогось, що я робив локально на своїй машині.

Єдине поточне рішення, про яке я можу придумати, - це динамічно генерувати власні імена введення, а потім витягувати значення в бекенде, але це здається досить хитрим способом вирішення цієї проблеми. Чи є теги чи примхи, які змінюють поведінку автозаповнення, які могли б бути використані для виправлення цього?


6
Це не дублікат. Цей обробляє відключення автоматичного заповнення, а один - стилізацію кольору автозаповнення ...
Nicu Surdu

17
autocomplete = "false" замість autocomplete = "off" відповідно до відповіді Кашоні Ференца, голосуйте за нього.
грубокодер

7
Подивіться на кількість відповідей на це питання - воно повинно вам щось сказати: ви ведете програшну битву. Це вже не проблема Chrome, Firefox та інші слідкують за цим рішенням. Вам подобається чи ні, вам потрібно прийняти рішення індустрії браузерів, що форма автозаповнення - це вибір користувача - ви можете боротися з ними, але ви програєте. Зрештою, питання, яке вам слід задавати, - це не те, як я можу підривати автозаповнення, а, як, як створити форми, які добре працюють із автоматичним заповненням. Ваші турботи щодо безпеки хвилюють не вас, а користувачів.
mindplay.dk

21
Вибачте, але відповідь @ mindplay.dk є контрпродуктивною. Моя ситуація полягає в тому, що у мене є користувачі, які увійшли на мій сайт, і сторінка на ньому повинна вводити інформацію про акаунт / pwd для інших систем. Коли я виставляю діалог для введення нового, їх інформація про вхід для мого сайту заповнюється, що є абсолютно неправильним і спричинить проблеми, якщо / коли користувачі ненавмисно вводять цю інформацію. Двоє не мають нічого спільного. один одного. У цьому випадку браузер робить щось протилежне тому, що хоче користувач.
Майк К

8
@ mindplay.dk - Мій веб-додаток - це програма управління робочим процесом на робочому місці, тому, ні, занепокоєння щодо безпеки моє турбуватися, як це вимагає керівництво вищого рівня, і його повинні дотримуватися всі працівники, так само "користувачі. " Однак, попросивши їх встановити Chrome, IE або будь-який інший веб-переглядач, вони залишать прогалини в процесі аутентифікації, оскільки вони можуть, навмисно чи ні, закінчуватися за допомогою автозаповнення. ANthe всі веб-програми однотипні, з тими ж користувачами або проблемами.
PoloHoleSet

Відповіді:


906

Для нових версій Chrome ви можете просто ввести autocomplete="new-password"поле свого пароля, і все. Я це перевірив, працює чудово.

Отримайте цю пораду від розробника Chrome у цій дискусії: https://bugs.chromium.org/p/chromium/isissue/detail?id=370363#c7

PS Зауважте, що Chrome намагатиметься зробити висновок щодо автозаповнення з імені, ідентифікатора та будь-якого текстового вмісту, який він може оточити полем, включаючи мітки та довільні текстові вузли. Якщо є маркер автозаповнення, як street-addressу контексті, Chrome автоматично заповнить його як такий. Евристика може бути дуже заплутаною, оскільки іноді спрацьовує лише в тому випадку, якщо у формі є додаткові поля, чи ні, якщо у формі занадто мало полів. Також зауважте, що autocomplete="no", здається, буде працювати, але autocomplete="off"не з історичних причин. autocomplete="no"Ви скажете браузеру, що це поле має бути автоматично заповнене у вигляді поля, яке називається "no". Якщо ви генеруєте унікальні випадкові autocompleteімена, ви вимикаєте автоматичне завершення.

Якщо ваші користувачі відвідали погані форми, інформація про автозаповнення може бути пошкодженою . Досягнення ними вручну та виправлення інформації про автоматичне заповнення в Chrome може бути необхідним для їх вжиття.


115
'new-password' працював у мене після спроби 'off' та 'false'
Кевін

26
Це єдине робоче виправлення зараз. Неправдиві та вимкнені, більше не працюють. Зараз має бути правильною відповіддю.
Девід

5
Причина цього працює в тому, що команда chrome намагається створити рекомендовані значення автозаповнення, як показано @ developers.google.com/web/fundamentals/design-and-ui/input/… Значення "new-password" - одне з мало хто має додаткову логіку, що оточує його, і в цьому випадку його призупинення автозаповнення, але все ж дозволяють пропозиції щодо автозаповнення
Deminetix

30
Не працює з 1.13.2018 р. Версія 63.0.3239.132 (Офіційна збірка) (64-розрядна)
PellucidWombat

36
Я просто хотів сказати .. Після того, як наткнутися на цю проблему .. Хром - справжня робота. Тож тепер ми повинні перестрибувати обручі, щоб відключити функціональність, яка мала залишатися необов’язковою. У якому світі адреса автозаповнення знадобиться в бізнес-додатку, де адреса кожного разу є новою / різною. Google стає так само погано, як і Microsoft.
Едді Говард

700

Щойно я з’ясував, що якщо у вас є запам'ятоване ім’я користувача та пароль для сайту, поточна версія Chrome автоматично заповнить ваше ім’я користувача / електронну адресу перед будь-яким type=passwordполем. Це не байдуже, як називається поле - просто передбачає поле, перш ніж паролем стане ваше ім'я користувача.

Старе рішення

Просто використовуйте, <form autocomplete="off">і це запобігає попередньому заповненню пароля, а також будь-якому виду евристичного заповнення полів на основі припущень, які може зробити браузер (які часто неправильні). На відміну від використання, <input autocomplete="off">яке, здається, в значній мірі ігнорується автозаповненням паролів (у Chrome, тобто Firefox це виконує).

Оновлене рішення

Зараз Chrome ігнорує <form autocomplete="off">. Тому моє оригінальне вирішення (яке я видалила) зараз все лютує.

Просто створіть пару полів і зробіть їх прихованими з "display: none". Приклад:

<!-- 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"/>

Потім покладіть під ваші справжні поля.

Не забудьте додати коментар, або інші люди у вашій команді будуть цікавити, що ви робите!

Оновлення березня 2016 року

Щойно перевірений на останньому Chrome - все добре. Зараз це досить стара відповідь, але я хочу лише зазначити, що наша команда вже багато років використовує її в десятках проектів. Він все ще чудово працює, незважаючи на кілька коментарів нижче. Немає проблем із доступністю, оскільки поля display:noneозначають, що вони не фокусуються. Як я вже згадував, вам потрібно поставити їх перед вашими реальними полями.

Якщо ви використовуєте javascript для зміни форми, вам знадобиться додатковий трюк. Покажіть підроблені поля, коли ви маніпулюєте формою, а потім прихойте їх знову мілісекундою пізніше.

Приклад коду за допомогою jQuery (якщо ви даєте клас підробленим полям):

        $(".fake-autofill-fields").show();
        // some DOM manipulation/ajax here
        window.setTimeout(function () {
            $(".fake-autofill-fields").hide();
        },1);

Оновлення липня 2018 року

Моє рішення більше не працює настільки добре, оскільки фахівці Chrome проти використання зручності працювали важко. Але вони кинули нам кістку у вигляді:

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

Це працює і здебільшого вирішує проблему.

Однак це не працює, коли у вас немає поля пароля, а лише адреса електронної пошти. Це також може бути важким для того, щоб перестати жовтіти і наповнювати. Виправити це можна за допомогою підробленого рішення.

Насправді іноді вам потрібно запустити дві партії підроблених полів і спробувати їх у різних місцях. Наприклад, у мене вже були підроблені поля на початку моєї форми, але нещодавно Chrome знову почав попередньо заповнювати моє поле "Електронна пошта" - тож я подвоївся і встав більше підроблених полів перед полем "Електронна пошта", і це виправило . Видалення або першого, або другого лоту полів повертається до неправильного надмірного заповнення.

Оновлення березня 2020 року

Не зрозуміло, чи і коли це рішення все ще працює. Здається, він все ще працює іноді, але не весь час.

У коментарях нижче ви знайдете кілька підказок. Один, що тільки що додав @anilyeni, можливо, варто ще розглянути:

Як я помітив, autocomplete="off"працює на Chrome 80, якщо в ньому менше 3 елементів <form>. Я не знаю, що це за логіка чи де пов'язана документація про неї.

Також ця версія від @dubrox може бути доречною, хоча я її не перевіряв:

велике спасибі за трюк, але будь ласка, оновіть відповідь, оскільки display:none;це вже не працює, але position: fixed;top:-100px;left:-100px; width:5px;так :)

Оновити КВІТЕНЬ 2020

Особливе значення хрому для цього атрибута виконує цю роботу: (перевірено на вході - але не мною) autocomplete="chrome-off"


7
Я був впевнений, що це спрацює, як ви прекрасно пояснили евристичну автозаповнення, яку я відчуваю при введенні перед полем пароля. На жаль, це не спрацювало для мене, я поставив autocomplete = "off" як на формі, так і на всіх вхідних даних, і вони все ще заповнюються. Єдине рішення, яке працювало для мене, - це посилання goodeye вище. (розміщення другого прихованого типу = "пароль" перед тим, як пароль скидає хронічні евристичні перевірки)
парламент

19
Це працювало чудово, я також його використовував, але оскільки оновлення Chrome деякий час тому (між тим часом і до 5 травня), Chrome ігнорує властивість форми :(
Tominator

13
Google прийняв рішення (Chrome v34, я думаю), щоб зробити його політикою ЗАВЖДИ зараз ігнорувати autocomplete = "off", включаючи директиви рівня форми ..., це було б добре, якщо б насправді правильно прокляті поля.
Джаммер

10
спробуйте autocomplete = "false" not autocomplete = "off"
грубокодер

242
Цей атрибут також необхідний:autocomplete="I told you I wanted this off, Google. But you would not listen."
rybo111

265

Після місяців і місяців боротьби я виявив, що рішення набагато простіше, ніж ви могли собі уявити:

Замість autocomplete="off"використання autocomplete="false";)

Так просто, і це працює як шарм і в Google Chrome!


Оновлення серпня 2019 року (заслуга @JonEdiger в коментарях)

Примітка: багато інформації в Інтернеті говорить, що браузери тепер вважають, що autocomplete = 'false' є таким же, як autocomplete = 'off'. Принаймні станом на цю хвилину, це запобігає автозаповненню для цих трьох браузерів.

Встановіть його на рівні форми, а потім для входів, які ви бажаєте відключити, встановіть якесь недійсне значення, наприклад, "жодне":

<form autocomplete="off"> 
  <input type="text" id="lastName" autocomplete="none"/> 
  <input type="text" id="firstName" autocomplete="none"/>
</form>

8
Працювали для мене! Але є одне важливе зауваження: у мене на веб-сторінці є 5 полів: ім'я, адреса, поштовий індекс, телефон та електронна пошта. Коли я включив autocomplete = 'false' у Форму та у поле Ім'я, воно все ще спрацювало. Однак, коли я включив autocomplete = 'false' також у поле Address, він остаточно припинив їх автоматичне заповнення! Отже, властивість автозаповнення потрібно розміщувати не на полі для входу чи імені, а на наступних полях! (Працював у Chrome 43.0.2357.81 станом на 05.05.2015)
Dvd Franco

45
ЯКЩО НЕ ПРАЦЮЄ ДЛЯ ВАС: майте на увазі, що існує два способи Chrome "допомагати" користувачам. AUTOCOMPLETE підкаже на основі попереднього подання у тій же формі, що подається, і вплине на людей, які використовують форму не раз. Автозаповнення вимкнено, коли функція autocomplete = "вимкнено". AUTOFILL підкаже на основі адресної книги з раніше заповнених аналогічних форм на інших сторінках. Він також виділить поля, які він змінює. Автозаповнення можна відключити за допомогою autocomplete = "false".
genkilabs

4
Це не працює для мене (версія 43.0.2357.124 м). Ймовірно, це було недоглядом Google, який зараз вирішено. Вони, здається, думають, що "користувач завжди має рацію", оскільки хоче все заповнити. Проблема полягає в тому, що моя реєстраційна форма зберігає дані користувачів так само, як це робить реєстраційна форма, що, безумовно, не те, що хоче користувач ...
rybo111,

3
YEP Це працює в Chrome 43.0.2357 !! така поведінка в Chrome настільки дратівлива, і це вирішення знадобило мені час, щоб розібратися. Дякую за вашу відповідь.
Адріано Роза

3
не працює з Chrome 44.0.2403.157. Як ця функція може працювати, а не працювати з різними версіями. Це смішно
Маттійс

120

Іноді навіть autocomplete=offне завадить заповнити облікові дані в неправильні поля.

Вирішення проблеми полягає в тому, щоб вимкнути автоматичне заповнення браузера в режимі читання та встановити фокус, що можна записати:

 <input type="password" readonly onfocus="this.removeAttribute('readonly');"/>

focusПодія відбувається на клацання миші і обході через поля.

Оновлення:

Mobile Safari встановлює курсор у полі, але не показує віртуальну клавіатуру. Цей новий спосіб працює як раніше, але обробляє віртуальну клавіатуру:

<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();  }" />

Демо-версія https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

Пояснення: Автоматичний переглядач браузера заповнює облікові дані неправильним текстовим полем?

неправильне заповнення входів, наприклад, заповнення вводу телефону адресою електронної пошти

Іноді я помічаю таку дивну поведінку на Chrome і Safari, коли є поля паролів у однаковій формі. Я думаю, браузер шукає поле для пароля, щоб вставити збережені облікові дані. Потім він автоматично заповнює ім'я користувача у найближче текстове поле для введення тексту, яке з’являється перед полем пароля в DOM (просто здогадуючись завдяки спостереженню). Оскільки веб-переглядач - це останній екземпляр, і ви не можете ним керувати,

Це виправлення лише для читання вище працювало для мене.


12
яке чудове виправлення :) Ви повинні замінити jquery на це: this.removeAttribute ("class")
Roey

Я використовував це, щоб запобігти заповненню списку спадних списків. Але також рестайлінг читати лише так, щоб він не виглядав. Класна ідея!
Зручно

1
@Clint: Мій фрагмент коду вище видаляє атрибут readonly, як тільки користувач входить у поле (за клік миші або клавішу вкладки). Я думаю, ви посилаєтесь на поле, яке захищено автоматичним заповненням , але користувач не торкається. Яка мета цього поля - і чи справді його потрібно захищати? Залежно від сценарію, можливим буде видалення всіх атрибутів, які читаються тільки після подання Чи можете ви додати більш конкретний коментар до своєї проблеми? Можливо, я можу вам допомогти :)
dsuess

1
Якщо ви використовуєте JavaScript. чому б просто не встановити значення dummyі потім знову видалити значення? Додавання та видалення лише повторно звучить як небезпечний крок - що робити, якщо браузер не хоче, щоб ви зосереджувались на ньому?
rybo111

1
Очевидно, Google намагається приймати рішення для всіх нас тут, вони закрили квиток щодо autocomplete = "off": bugs.chromium.org/p/chromium/isissue/detail?id=468153 . Але є інший квиток для збору дійсних справ користувачів про відключення автозаповнення, будь ласка, відповідайте на цей квиток, щоб підвищити рівень поінформованості щодо цієї проблеми тут: bugs.chromium.org/p/chromium/isissue/detail?id=587466
Norman Xu

81

Якщо ви реалізуєте функцію вікна пошуку, спробуйте встановити typeатрибут searchтаким чином:

<input type="search" autocomplete="off" />

Це працює для мене на Chrome v48 і, схоже, є законною розміткою:

https://www.w3.org/wiki/HTML/Elements/input/search


Так! :) Дякую! Це працює в Chrome 67.0.3396.99. (Я думаю, ваше посилання має бути: w3.org/wiki/HTML/Elements/input/search станом на вересень 2018 року).
Енді Кінг

4
Нарешті! все ще працює Версія 69.0.3497.100 (Офіційна збірка) (64-розрядна) Це має бути справжньою відповіддю!
Венсон

1
всі правильно і неправильно, і в той же час ви повинні написати автозаповнення = "вимкнено" всередині тегу <form autocomplete = "off"> замість введення, і це зупинить поведінку автозаповнення
demopix

2
Також працює, якщо ви встановите autocomplete = "off" у формі (щоб змінити цю форму за замовчуванням у всій формі), а потім просто потрібно встановити type = "search" на <input>
Іван

9
Після Chrome версії 72.XX це виправлення не працює. Знайти Lastest фікс тут stackoverflow.com/a/55045439/1161998
Adheep Mohamed Abdul Kader

65

Спробуйте це. Я знаю, що питання дещо старе, але це інший підхід до проблеми.

Я також зауважив, що проблема надходить просто над passwordполем.

Я спробував обидва способи, як

<form autocomplete="off">і <input autocomplete="off">ніхто з них не працював на мене.

Тому я виправив це за допомогою фрагмента нижче - просто додав ще одне текстове поле трохи вище поля типу пароля і зробив це display:none.

Щось на зразок цього:

<input type="text" name="prevent_autofill" id="prevent_autofill" value="" style="display:none;" />
<input type="password" name="password_fake" id="password_fake" value="" style="display:none;" />
<input type="password" name="password" id="password" value="" />

Сподіваюся, це комусь допоможе.


1
Цей працював на мене (поки що). Я виявив, що з часом я використав близько півдесятка різних хак, і через деякий час Chrome вирішив, що хоче перемогти цей хак. Тож потрібна нова, така, як ця. У своїй заявці у мене є форма оновлення профілю з полями електронної пошти та пароля, які потрібно залишити порожніми, якщо користувач не хоче вносити зміни. Але коли Chrome заповнює автозаповнення, він ставить userid у поле "підтвердження електронної пошти", в результаті чого виникають всі види помилок, які призводять до подальших умов помилок, оскільки користувач балується з приводу спроб зробити правильно.
Джеффрі Саймон

2
Швидке пояснення того, чому цей хак працює (поки що): Chrome бачить перший тип = введення пароля і автоматично заповнює його, і він передбачає, що поле безпосередньо перед цим ОБОВ'ЯЗКОВО є полем користувача, і автоматично заповнює це поле ім'ям користувача. @JeffreySimon це повинно пояснити явище userid у полі підтвердження електронної пошти (я бачив те ж саме у своїй формі).
MrBoJangles

1
@kentcdodds - не впевнений, що ти маєш на увазі, що більше не працює. У вашого jsbin немає поля пароля, тому ситуація інша. Я використовую це рішення протягом багатьох років, і останнім часом я помітив, що він потрібен, і він працював на мене лише минулого тижня (березень 2015 року).
Майк Нельсон

1
Ура! Рішення, яке, здається, працює! Я б радив дати ім'я поля passwordта мати actual_passwordзаконне поле, як Google, схоже, зараз дивиться на name. Однак це означає, що Chrome не збереже пароль. Це функціонал, який я насправді хочу . AAAAARRRRGHH!
rybo111

2
Оновлення: це продовжує працювати протягом року з моменту останнього впровадження. У нас може бути солідний переможець.
MrBoJangles

48

Я не знаю чому, але це допомогло і працювало на мене.

<input type="password" name="pwd" autocomplete="new-password">

Я поняття не маю чому, але autocompelete = "new-password" вимикає автозаповнення. Він працював в останній 49.0.2623.112 хромованій версії.


Оновив мій хром, і досі він працює для мене. 50.0.2661.87 (64bit)
Таурас

На жаль, при надсиланні форми (або коли поля введення приховані / видалені), Chrome потім просить зберегти змінений логін.
сіббл

Працює у версії 51.0.2704.79 м
Джеффрі Хейл

свято f ***, чому це працює? це помилка? тому що я тестував його тут і розміщую його лише на одному вході і працював як для входу, так і для пароля, але я вводив його лише в паролі
Leandro RR

Я поняття не маю. Я думаю, що це хромована «річ», яку зробили розробники. Можливо, я помиляюся.
Таурас

46

Для мене просто

<form autocomplete="off" role="presentation">

Зробив це.

Тестовано на кількох версіях, остання спроба була 56.0.2924.87


Додана версія @ArnoldRoa, вона є на нашому сайті з дня, коли я опублікував її, і було кілька версій, де вона працювала чудово. яку версію ви використовуєте? ПК / Mac?
Куф

Не працює 57.0.2987.110. Chrome виділяє його жовтим кольором і попередньо заповнить поле моїм збереженим паролем. Але сторінка - це сторінка управління користувачем, а не сторінка входу.

1
@Dummy Я перевірив це зараз на хромовані останні (57), і він все ще працює для мене. Ви робили щось особливе з полями введення? cap, ви поставили свій код десь, я можу спробувати відтворити?
Куф

3
Версія 64.0.3282.186 (Офіційна збірка) (64-розрядна) Windows. 2018-03-01 НЕ РОБОЧИ за відключення автозаповнення.
billy jean

2
Досить впевнений, що це видаляє форму / вхід із допоміжних технологій w3c.github.io/using-aria/#ariapresentation
Олекс Пономаренко

25

Ви повинні додати цей атрибут:

autocomplete="new-password"

Джерело посилання: Повна стаття


Чи є у вас джерела, як це зрозуміти?
AlexioVay

Працює, але не є семантичним, оскільки його можна використовувати в імені користувача та інших полях.
Робін Ендрюс

1
Сторінка документації: developer.mozilla.org/en-US/docs/Web/Security/…
Justinas

19

Це так просто і хитро :)

Google Chrome в основному пошук кожного першого видимого пароля елемент всередині <form>, <body>і <iframe>теги , щоб дозволити автоматичне поповнення для них, так , щоб відключити цю функцію вам необхідно додати елемент фіктивного пароля в наступному вигляді :

    • якщо ваш елемент пароля всередині <form>тегу, вам потрібно поставити фіктивний елемент як перший елемент у вашій формі відразу після <form>відкритого тегу

    • якщо ваш пароль елемента не знаходиться в <form>тезі, ставимо елемент манекена як перший елемент на вашій html-сторінці відразу після <body>відкритого тегу

  1. Вам потрібно приховати елемент манекена, не використовуючи css, display:noneтому в основному використовуйте наступне як елемент фіктивного пароля.

    <input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/>

1
Чудова робота, як ви дізналися алгоритм Chrome? Щойно я з’ясував, що мій старий метод зміни значення на JS після завантаження сторінки за допомогою таймера setTimeout більше не працює. Але це працює ідеально!

На жаль, не працює для звичайних входів TextBox.
eYe

1
насправді це працює просто встановити властивість імені;)
Fareed Alnamrouti

У Chrome 58 це не працює. Використовуйте ширину: 1 пікс. Якщо поле пароля повністю приховане, Chrome автоматично заповнює його нормально. Також z-index: -999 може бути корисним, щоб він не перекривав жодний вміст.
cristiancastrodc

1
Працює в Chrome 67.0 на кутовому компоненті html<form *ngIf="!loggedIn()" #loginForm="ngForm" class="navbar-form navbar-right" (ngSubmit)="login()"><input type="password" style="width: 0;height: 0; visibility: hidden;position:absolute;left:0;top:0;"/><input type="text" #username="ngModel" placeholder="Username" class="form-control" required autocomplete="off" name="username" [(ngModel)]="model.username"><input type="password" #password="ngModel" placeholder="Password" class="form-control" required autocomplete="off" name="password" [(ngModel)]="model.password">...
Junior Mayhé

19

Ось мої запропоновані рішення, оскільки Google наполягає на тому, щоб перекрити будь-яку роботу, яку люди, здається, роблять.

Варіант 1 - виберіть весь текст при натисканні

Встановіть значення входів для прикладу для вашого користувача (наприклад your@email.com) або мітки поля (наприклад Email) та додайте клас, покликаний focus-selectдо своїх входів:

<input type="text" name="email" class="focus-select" value="your@email.com">
<input type="password" name="password" class="focus-select" value="password">

І ось jQuery:

$(document).on('click', '.focus-select', function(){
  $(this).select();
});

Я дійсно не бачу, як Chrome ніколи не возився зі значеннями. Це було б шалено. Тож сподіваємось, це безпечне рішення.

Варіант 2 - встановіть значення електронної пошти пробілом, а потім видаліть його

Припустимо, що у вас є два входи, наприклад електронна пошта та пароль, встановіть значення поля електронної пошти на " "(пробіл) та додайте атрибут / значення autocomplete="off", а потім очистіть це за допомогою JavaScript. Ви можете залишити значення пароля порожнім.

Якщо користувач з якихось причин не має JavaScript, переконайтеся, що ви обрізаєте його вхідний сервер (ви, мабуть, так і маєте бути), якщо він не видалить пробіл.

Ось jQuery:

$(document).ready(function() {
  setTimeout(function(){
    $('[autocomplete=off]').val('');
  }, 15);
});

Я встановив тайм-аут, 15тому що, 5здавалося, час від часу працював у моїх тестах, тому трепетування цієї кількості здається безпечною ставкою.

Якщо не встановити початкове значення пробілу, Chrome залишає введення жовтим, як ніби він автоматично заповнив його.

Варіант 3 - приховані входи

Поставте це на початку форми:

<!-- Avoid Chrome autofill -->
<input name="email" class="hide">

CSS:

.hide{ display:none; }

Не забудьте зберегти HTML-ноту, щоб інші її розробники не видаляли її! Також переконайтесь, що ім’я прихованого входу є релевантним.


@Vaia - ви спробували перейти на іншу сторінку, а потім натиснути кнопку назад? Я отримую неоднозначні результати - це може знадобитися налаштування.
rybo111

Я не пробував варіант 1, якщо ви це маєте на увазі. Також мені просто потрібно було відключити автозаповнення на завантаженому в Ajax модалі, який не буде викликаний кнопкою "назад". Але якщо будуть інші результати, я вам скажу. @ rybo111
AlexioVay

@Vaia Я мав на увазі варіант 2 - будь ласка, дайте відповідь тут, якщо у вас виникли проблеми. Дякую.
rybo111

15

Використовуйте захист тексту css : диск без використання type = пароль .

html

<input type='text' name='user' autocomplete='off' />
<input type='text' name='pass' autocomplete='off' class='secure' />

or

<form autocomplete='off'>
    <input type='text' name='user' />
    <input type='text' name='pass' class='secure' />
</form>

css

input.secure {
    text-security: disc;
    -webkit-text-security: disc;
}

найкращий підхід, який я знайшов поки що! ну, принаймні, для Chrome 64: /
scipper

Для моїх цілей це ідеально, дякую! Chrome не автозаповнює і не заповнює автозаповнення, не пропонує зберегти його, і він не лише закритий від перегляду, але і з буфера обміну - я скопіював те, що я набрав, і вставив його в блокнот і щойно отримав "••• •••••••• „. Блискуче!
Дуг Маклін

15

У деяких випадках браузер продовжує запропонувати значення автозаповнення, навіть якщо атрибут автозаповнення встановлено на вимкнено. Така несподівана поведінка може бути досить спантеличною для розробників. Трюк у тому, щоб дійсно змусити неавтоматичне завершення, - призначити атрибуту випадковий рядок , наприклад:

autocomplete="nope"

RE: "несподівана поведінка" Ця поведінка підштовхується Google, який вважає, що вона краще, ніж розробники, знає, як повинна працювати кожна сторінка. Іноді я просто хочу ввести нераціональний пароль, нульові надмірності.
Регулярний Джо

3
ця комбінація НАЙКРАЙНО працювала для мене: role = "презентація" autocomplete = "nope" перевірена на версії Chrome 64.0.3282.186 (офіційна збірка) (64-розрядна). Який кошмар!
billy jean

2
Випадкова рядок працює для chrome, але не для firefox. Для повноти я використовую як "autocomplete = 'off-no-complete'" і встановлюю атрибут readonly за допомогою onfocus = "this.readOnly = false". Мій додаток - це корпоративне програмне забезпечення, яке користувачі використовують для введення тисяч адрес, тому випадки використання для управління цією реальністю - я також можу гарантувати використання Javascript, тому принаймні у мене це відбувається
ChronoFish

13

Я виявив, що додавання цього до форми не дозволяє Chrome використовувати автозаповнення.

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

Знайдено тут. https://code.google.com/p/chromium/isissue/detail?id=468153#hc41

Дуже розчаровує те, що Chrome вирішив, що він знає краще, ніж розробник, про те, коли робити автозаповнення. Має справжнє відчуття Microsoft.


Насправді не те, що ви говорите PreventChromeAutocomplete. Мені вдалося змусити автозавершити роботу, сказавши autocomplete = "off" та name = "somename". Але це працює лише в тому випадку, якщо ви назвали два різні входи з тим самим іменем. Тож у вашому випадку PreventChromeAutocomplete повинен бути застосований до двох різних входів. Дуже дивно ...
Джо Геймінг

11
<input readonly onfocus="this.removeAttribute('readonly');" type="text">

додаючи атрибут readonly до тегу разом із подією onfocus, видаляючи його, виправляє проблему


Це рішення працює над текстовими полями
Денис Слоновщі

9

Для комбінацій паролів з іменем користувача це проблему легко вирішити. Евристика Chrome шукає схему:

<input type="text">

далі:

<input type="password">

Просто перервіть цей процес, скасувавши це:

<input type="text">
<input type="text" onfocus="this.type='password'">

На жаль, це стосується не лише речей, що стосуються імені користувача / пароля. Chrome перегляне текст заповнення, щоб зробити висновок про те, що запропонувати. Наприклад: jsbin.com/jacizu/2/edit
kentcdodds

Дійсно, що ви все одно зможете заповнювати поля пропозиціями веб-переглядача, як це демонструє ваш приклад, тому це насправді не вирішує проблему ОП. Це рішення просто заважає браузеру "автоматично" заповнювати комбінації імені користувача та паролів, як у прикладі у верхній відповіді. Деяким це може бути корисно, але це не ціле рішення просто відключення автозаповнення, яке доведеться отримати від Google.
Бернесто

4
Хоча, якщо ви додасте пробіл перед текстом заповнення, це відключить автоматичну пропозицію на основі також заповнення місця. Однозначно хак, хоча не більше, ніж інші пропозиції. jsbin.com/pujasu/1/edit
Бернесто

насправді ... здавалося, це працює для твого прикладу, але чомусь це не працює для мене :-(
kentcdodds

Га! Ось чому його називають хаком ... У вас є приклад, яким ви можете поділитися там, де це не працює?
Бернесто

8

Майк Нелсонс за умови, що рішення не працювало для мене в Chrome 50.0.2661.102 м. Просто додавання вхідного елемента одного типу з дисплеєм: жоден набір більше не вимикає автоматичне завершення власного веб-переглядача. Тепер потрібно дублювати атрибут імені поля введення, яке потрібно вимкнути автоматичним заповненням.

Крім того, щоб уникнути дублювання поля введення, коли вони знаходяться в елементі форми, слід розмістити вимкнений елемент, який не відображається. Це запобіжить подання цього елемента в рамках дії форми.

<input name="dpart" disabled="disabled" type="password" style="display:none;">
<input name="dpart" type="password">
<input type="submit">

Що стосується червня 2016 року та Chrome 51.0.2704.106 м, то це єдине робоче рішення
Денис

Але чи форма вибере потрібне (видиме) поле введення, яке вам потрібно? Бо це ж ім’я.
AlexioVay

@Vaia, додавання відключеного атрибуту до дублюючого елемента запобіжить його надсилання.
mccainz

8

У 2016 році Google Chrome почав ігнорувати, autocomplete=offхоча він є в W3C. Відповідь, яку вони опублікували :

Тут складна частина полягає в тому, що десь на шляху веб-автозаповнення = вимкнення стає за замовчуванням для багатьох полів форми, без будь-якої реальної думки щодо того, чи добре це для користувачів. Це не означає, що не дуже дійсні випадки, коли ви не хочете, щоб браузер автоматично заповнював дані (наприклад, в системах CRM), але, загалом, ми розглядаємо їх як випадки меншості. І як результат, ми почали ігнорувати дані автозаповнення = вимкнено для даних автоматичного заповнення Chrome.

Що по суті говорить: ми краще знаємо, чого хоче користувач.

Вони відкрили ще одну помилку для публікації дійсних випадків використання, коли потрібне автозавершення = вимкнено

Я не бачив проблем, пов’язаних із автозаповненням, через усі мої програми B2B, але тільки з введенням типу пароля.

Автозаповнюйте дії, якщо на екрані є поле пароля, навіть приховане. Щоб порушити цю логіку, ви можете поставити кожне поле пароля у свою форму, якщо воно не порушує логіку вашої сторінки.

<input type=name >

<form>
    <input type=password >
</form>

4
Оскільки ваша відповідь є останньою, чи не могли б ви додати, що додавання autocomplete="pineapple"чи якась інша ганьба також, здається, вирішує проблему? Принаймні, це було з мого кінця!
Дуве де Хаан

1
@DouwedeHaan це добре, поки форма не буде збережена, тоді автозаповнення надасть рекомендації щодо збереженого поля "ананас". Але, можливо, використання випадкового хеша для значення автозаповнення, наприклад, обмине це?
виїзд

@digout Я згоден. Хорошим прикладом може бути використання UUID для подібних матеріалів. Просто переконайтеся, що рядок унікальний!
Дуве де Хаан

7

Якщо у вас виникли проблеми із збереженням заповнювачів, але вимкненням хромованого автозаповнення, я знайшов це вирішення.

Проблема

HTML

<div class="form">
    <input type="text" placeholder="name"><br>
    <input type="text" placeholder="email"><br>
    <input type="text" placeholder="street"><br>
</div>

http://jsfiddle.net/xmbvwfs6/1/

Вищеописаний приклад все ще створює проблему автозаповнення, але якщо ви використовуєте required="required"і деякі CSS, ви можете скопіювати заповнювачі, і Chrome не вибирає теги.

Рішення

HTML

<div class="form">
    <input type="text" required="required">
    <label>Name</label>  
    <br>
    <input type="text" required="required">
    <label>Email</label>    
    <br>
    <input type="text" required="required">
    <label>Street</label>    
    <br>
</div>

CSS

input {
    margin-bottom: 10px;
    width: 200px;
    height: 20px;
    padding: 0 10px;
    font-size: 14px;
}
input + label {
    position: relative;
    left: -216px;
    color: #999;
    font-size: 14px;
}
input:invalid + label { 
    display: inline-block; 
}
input:valid + label { 
    display: none; 
}

http://jsfiddle.net/mwshpx1o/1/


Це єдине рішення, яке насправді працює. Мені це дуже не подобається, але це кричущий стан, у якому ми зараз перебуваємо :-(
kentcdodds

Станом на 2017 рік цей все ще працює чудово. Просто потрібен цей скрипт, щоб примусити inputзосередитися, якщо користувач натисне на "підроблений" заповнювач: $("label").on("click",function(){ $(this).prev().focus(); });Зауважте, що це labelне може бути раніше, ніж input... Chrome знайде його! Приємне творче рішення! +1
Louys Patrice Bessette

7

Мені дуже не сподобалося робити приховані поля, я думаю, що зробити так, що дійсно стане дуже заплутаним.

У полях введення, які ви хочете зупинити від автоматичного заповнення, це буде працювати. Зробіть так, щоб поля читалися лише та фокус видаляли такий атрибут

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

для цього потрібно спочатку видалити атрибут лише для читання , вибравши поле, і в цей час, швидше за все, ви будете заповнені власним вводом користувача та зупиняєте автозаповнення, щоб перейняти


1
На жаль, це більше не працює :-( jsbin.com/sobise/edit?html,css,output
kentcdodds

7

Раніше введені значення, кешовані хромом, відображаються як список вибору, що випадає. Це можна відключити за допомогою автоматичного заповнення = вимкнено, явно збережена адреса в розширених налаштуваннях хрому дає спливаюче вікно заповнення, коли поле адреси набуває фокус. .Але це дозволить хромувати відображення кешованих значень у спадному меню.

У полі введення html наступне відключить обидва.

Role="presentation" & autocomplete="off"

Під час вибору полів введення для автоматичного заповнення адреси Chrome ігнорує поля введення, які не мають попереднього HTML-елемента мітки.

Щоб переконатися, що хромований аналізатор ігнорує поле введення для автоматичного заповнення адреси, між міткою та текстовим полем може бути додана прихована кнопка або контроль зображення. Це порушить хромовану послідовність розбору ярликів -вхідної пари створення для автозаповнення. Під час розбору адресних полів прапорці ігноруються

Chrome також розглядає атрибут "для" на елементі мітки. Його можна використовувати для порушення послідовності розбору хрому.


Я тебе люблю. Єдине рішення на цій сторінці, яке насправді працює.
День Девіс Уотербері

Не працює в 2020 році.
Кай Ноак

7

Оскільки у нас є ця проблема, я вклав деякий час, щоб написати робоче розширення jQuery для цього випуску. Google повинен дотримуватися розмітки html, а не ми

(function ($) {

"use strict";

$.fn.autoCompleteFix = function(opt) {
    var ro = 'readonly', settings = $.extend({
        attribute : 'autocomplete',
        trigger : {
            disable : ["off"],
            enable : ["on"]
        },
        focus : function() {
            $(this).removeAttr(ro);
        },
        force : false
    }, opt);

    $(this).each(function(i, el) {
        el = $(el);

        if(el.is('form')) {
            var force = (-1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable))
            el.find('input').autoCompleteFix({force:force});
        } else {
            var disabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.disable);
            var enabled = -1 !== $.inArray(el.attr(settings.attribute), settings.trigger.enable);
            if (settings.force && !enabled || disabled)
                el.attr(ro, ro).focus(settings.focus).val("");
        }
    });
};
})(jQuery);

Просто додайте це у такий файл, як /js/jquery.extends.js, і додайте його до jQuery. Застосуйте його до кожного елемента форми при завантаженні документа таким чином:

$(function() {
    $('form').autoCompleteFix();
});

jsfiddle з тестами


6

Спробуйте наступний jQueryкод, який працював на мене.

if ($.browser.webkit) {
    $('input[name="password"]').attr('autocomplete', 'off');
    $('input[name="email"]').attr('autocomplete', 'off');
}

дивовижні дивовижні рішення
DKR

Ви можете просто додати autocomplete="off"до поля введення, а не використовувати jquery. І до речі, це не працює. Пропозиції щодо пароля Chrome все ще відображаються.
Кай Ноак

6

Тут є дві частини. Chrome та інші веб-переглядачі запам’ятають раніше введені значення для імен полів та нададуть користувачеві список автозаповнення на основі цього (зокрема, введення типів пароля ніколи не запам'ятовується таким чином з досить очевидних причин). Ви можете додати, autocomplete="off"щоб запобігти цьому в таких речах, як поле електронної пошти.

Однак у вас є заповнювачі паролів. Більшість браузерів мають власні вбудовані реалізації, а також є багато сторонніх утиліт, які надають цю функціональність. На цьому ви не можете зупинитися. Це користувач, який робить власний вибір, щоб зберегти цю інформацію для автоматичного заповнення пізніше і повністю виходить за межі сфери та сфери впливу вашої програми.


Перша частина цієї відповіді більше не відповідає дійсності: Chrome Bug
Джошуа Дрейк

Я не впевнений, про що ти йдеш. Цей "помилка" - це просто заповнювач Chromium для збору випадків використання людей autocomplete="off". Це можливо намір полягає в тому, щоб видалити його, але це не завжди явно, і немає , звичайно , нічого зажадавши , розумовий стрибок. Вони, можливо, просто хочуть розглянути альтернативні або кращі способи лікування. Незважаючи на те, вона все ще є частиною специфікації, і знову ж таки, жодних ознак того, що вона також покине специфікацію. Наскільки я знаю, він все ще працює у всіх браузерах, включаючи Chrome.
Кріс Пратт

У нас є кілька випадків, коли Chrome не дотримується функції autocomplete = "off".
Джошуа Дрейк

1. Пара анекдотичних випадків не є доказами. 2. Як я вже говорив у своїй відповіді, розширення форми заповнення форми тощо можуть цього не робити і часто не поважати. Зрештою, як і всі речі, це залежить від клієнта, а отже, і від користувача. Все, що ви можете зробити, - це припустити, що воно не повинно бути заповненим автоматично.
Кріс Пратт


6

Встановивши, autocompleteщо offтут слід працювати, у мене є приклад, який Google використовує на сторінці пошуку. Я виявив це у елемента перевірки.

введіть тут опис зображення

редагувати : Якщо offне працює, спробуйте falseабо nofill. У моєму випадку він працює з хромованою версією 48.0


5

Ось брудний злом -

Ви маєте тут свій елемент (додаючи відключений атрибут):

<input type="text" name="test" id="test" disabled="disabled" />

А потім внизу вашої веб-сторінки поставте JavaScript:

<script>
    setTimeout(function(){
        document.getElementById('test').removeAttribute("disabled");
        },100);
</script>

5

Різне рішення, засноване на вебкітах. Як уже згадувалося, у будь-який час Chrome знайде поле для пароля, яке автоматично заповнює електронну пошту. AFAIK, це незалежно від автозаповнення = [що завгодно].

Щоб обійти цю зміну, введіть тип введення тексту та застосуйте шрифт безпеки webkit у будь-якій формі, яку ви хочете.

.secure-font{
-webkit-text-security:disc;}

<input type ="text" class="secure-font">

Як я бачу, це як мінімум так само безпечно, як тип введення = пароль, це захист копіювання та вставлення. Однак він вразливий, видаляючи стиль, який видалить зірочки, звичайно, тип введення = пароль можна легко змінити на тип введення = текст на консолі, щоб виявити будь-які заповнені паролі, так що це настільки ж справді.


Дякую! Це єдине, що працює в хромі 49. Попередні методи зламалися, оскільки хром, здається, заповнює всі введення type="password"тепер.
epelc

4

Єдиний спосіб, який працює для мене: (потрібен jQuery)

$(document).ready(function(e) {
    if ($.browser.webkit) {
        $('#input_id').val(' ').val('');
    }
});

4

Я зіткнувся з тією ж проблемою. Ось рішення щодо відключення автозаповнення імені користувача та пароля в Chrome (тільки тестується лише в Chrome)

    <!-- Just add this hidden field before password as a charmed solution to prevent auto-fill of browser on remembered password -->
    <input type="tel" hidden />
    <input type="password" ng-minlength="8" ng-maxlength="30" ng-model="user.password" name="password" class="form-control" required placeholder="Input password">

дивне виправлення, але якось це єдине, що працює для мене на chrome 48 :)
Jacka,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.