Я только что обнаружил, что если у вас есть запомненное имя пользователя и пароль для сайта, текущая версия Chrome автоматически заполнит ваше имя пользователя / адрес электронной почты в поле перед любым type=password
полем. Не имеет значения, как называется поле - просто предполагается, что это поле перед тем, как пароль будет вашим именем пользователя.
Старое решение
Просто используйте, <form autocomplete="off">
и это предотвращает предварительное заполнение пароля, а также любое эвристическое заполнение полей на основе предположений, которые может сделать браузер (которые часто ошибочны). В отличие от использования, <input autocomplete="off">
которое, по-видимому, в значительной степени игнорируется автозаполнением пароля (то есть в Chrome, Firefox его выполняет).
Обновленное решение
Хром теперь игнорирует <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
Специальное значение для chrome для этого атрибута делает работу: (проверено на входе - но не мной)
autocomplete="chrome-off"