Отключить автозаполнение хрома для имени пользователя и пароля, не работающего в более новых версиях

Мой проект находится в ReactJS и Redux, и я использую redux-form для своих форм. У меня есть две формы (обе имеют поля для ввода текста и пароля) на странице моего веб-сайта. Теперь Chrome показывает список автозаполнения для одной формы в другой, и он не работает должным образом, из-за чего увеличился показатель отказов на моем веб-сайте.

Я хотел бы отключить раскрывающийся список автозаполнения и автозаполнения, но не могу получить для этого никакого решения. Моя версия Chrome - 71.0.3578.98.

Я пробовал следующие вещи (как прочитано из других ссылок на переполнение стека); но ни один из них не работает.

Единственное, что, похоже, работает правильно, - это сделать поля доступными только для чтения и удалить только для чтения, когда пользователь начинает вводить (событие onKeyDown). Затем, если пользователь нажимает клавишу возврата и ввод пуст, make снова будет доступен только для чтения, в противном случае снова появится раскрывающийся список автозаполнения. Это решение больше похоже на взлом, и я хотел бы знать какое-нибудь лучшее решение для этого.

PS: Это повторяющийся вопрос, но у меня нет подходящего решения, которое работает в новой версии Chrome. Ссылки, по которым я следил: Отключение автозаполнения Chrome, Chrome игнорирует autocomplete = off, Как отключить Chrome для автозаполнения имени пользователя / пароля электронной почты?, Отключить автозаполнение / автозаполнение / предложение в Google Chrome и многое другое.


person Sunil Chaudhary    schedule 29.01.2019    source источник


Ответы (6)


Я пытался найти надежный метод остановки именно этого, и единственное решение, которое я нашел работающим, - это размещение пары скрытых полей в верхней части тела.

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

Хакер, я знаю, но я даже попробовал точный пример, приведенный в Ссылка на ответ команды Chrome, упомянутая Coderer:

Например, если у вас есть поле ввода адреса в вашем инструменте CRM, которое вы не хотите, чтобы Chrome выполнял автозаполнение, вы можете придать ему семантическое значение, которое имеет смысл относительно того, что вы просите: например, autocomplete = "новый-пользователь-уличный-адрес". Если Chrome столкнется с этим, он не будет пытаться автоматически заполнить поле.

... но это не работает (хотя посту много лет).

person lifeform    schedule 14.02.2019

Вы пробовали совет из этого официального ответа команды Chrome?

В случаях, когда вы действительно хотите отключить автозаполнение, мы предлагаем на данном этапе использовать атрибут автозаполнения, чтобы придать правильное семантическое значение вашим полям. Если мы встретим атрибут автозаполнения, который не распознаем, мы не будем пытаться заполнить его.

На самом деле это не сработает, если у вас нет действительного атрибута name. Итак, вы пробовали что-то вроде <input type="text" name="fieldX" autocomplete="my-site-field-x">? Значения, используемые для name и autocomplete, могут иметь значение, поскольку я слышал, что некоторые люди предполагают, что Chrome иногда будет выполнять нечеткое сопоставление с распознанными значениями из спецификации (например, address, telephone, email и т. Д.).

person Coderer    schedule 14.02.2019
comment
Этот пост написан в 2016 году и больше работать не будет. На этой неделе Google выпустил обновление (v. 72.0.3626.x), которое игнорирует все настройки автозаполнения, включая новый пароль. Если он обнаруживает поле ввода типа «пароль» в любом месте кода, он автоматически заполняет имя пользователя в первом (или случайном) поле ввода, которое он находит. - person PeterToTheThird; 14.02.2019
comment
Кто-нибудь из команды Chrome опубликовал какое-нибудь обновленное руководство? Я успешно использовал это руководство для форм, не содержащих пароль. (Кстати, в моем личном использовании, я не могу вспомнить, когда в последний раз автозаполнение действительно выполняло то, что я хотел ...) - person Coderer; 18.02.2019

Мне удалось отключить функцию автозаполнения Chrome, создав скрытый ввод прямо перед вводом и добавив случайное число для исходного имени ввода:

<input type="text" name="address" value="" readOnly={true} style={{display: "none"}}/>
<input
  ref={inputRef}
  className="form-control"
  type="text"
  name={"address " + Math.random()}    <--- add random number to prevent Chrome autofill
  required
  placeholder="New York"
  value={location.address}
  onChange={handleInputChange}
/>
person Alexander    schedule 18.06.2019

Я нашел способ заставить работать решение скрытого ввода. Я использовал его в своем проекте, чтобы отключить автоматическое заполнение моего имени пользователя хромом.

<!-- add a dummy input element and make sure chrome will auto-populate your username(or address etc) to it -->
<input type="text" style="pointer-events: none; opacity: 0; position: absolute">
pointer-events: none;  => make it not the target of pointer events
opacity: 0;   => make it disappear
position: absolute;   => don't let it break your dom structure

Прекрасно работает в Chrome 75.0.3770.100.

Надеюсь, это поможет.

person Yan    schedule 10.07.2019

Это будет работать

<input type="any" readonly onfocus="this.removeAttribute('readonly');">
person aprinciple    schedule 23.08.2019

Альтернативный подход

Основная причина этой проблемы заключается в том, что установка input type = password автоматически приводит к появлению всех сохраненных учетных данных, и кажется, что ничего не работает, чтобы остановить это.

Общая идея этого решения состоит в том, чтобы избежать установки type = password и сделать вводимый текст похожим на поле пароля. К счастью, сделать это в Chrome довольно просто, но, к сожалению, это не работает для Firefox, Internet Explorer и Firefox Android, согласно этой ссылке https://developer.mozilla.org/en-US/docs./Web/CSS/-webkit-text-security

Решение

Вместо использования классического ввода с типом пароля

<input type="password"/>

сделайте следующее:

<input type="text" style="-webkit-text-security: disc;"/>

Надеюсь, это решение будет для вас полезным.

person Dante Rosales Díaz    schedule 11.05.2021