Щойно я з’ясував, що якщо у вас є запам'ятоване ім’я користувача та пароль для сайту, поточна версія 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"