Google chrome автозаполнение всех входов пароля

Моя проблема

Я, должно быть, включил google для автозаполнения для входа на мой сайт, однако он теперь пытается автозаполнять эти данные для входа, когда я хочу редактировать информацию об учетной записи или редактировать другую учетную запись пользователя (в качестве администратора). Он заполняет мои данные в странных местах. Проблема заключается в том, что Chrome автоматически заполняет любой ввод с помощью типа пароля, а затем независимо от ввода до его появления (см. Рисунок ниже). Если я поставлю перед ним окно выбора, он не будет автозаполнен.

Google autofilling registration with login details

Я, очевидно, не хочу проходить и удалять пароль/телефон каждый раз, когда я редактирую пользователя. Я также не хочу, чтобы мои пользователи должны были делать это, когда они редактируют свою собственную учетную запись. Как его удалить?

Что я пробовал (без успеха)

  • Добавление автозаполнения = "выкл." в форму, а также вход для телефона и пароля.
  • Добавление значения = "" на оба входа
  • Изменение name= ввода пароля. Я попробовал pw, pass, password и cheese (incase chrome собирал название).
  • Добавление autocomplete = "off" через jquery.attr

Что я нашел

Я обнаружил, что Google может умышленно игнорировать автозаполнение: Google игнорирует автозаполнение

Я нашел другого пользователя, отправляющего аналогичный вопрос, но решение для меня не работает: Отключить автозаполнение Chrome

Я также нашел другого пользователя, делающего работу вокруг создания скрытого поля пароля, которое займет автозаполнение google, я бы предпочел более чистое решение, так как в моем случае мне также понадобился бы скрытый ввод над ним, чтобы избежать как автозаполнения: Отключить автозаполнение в хроме без отключения автозаполнения

Ответ 1

Иногда даже автозаполнение = выкл не помешает заполнять учетные данные в неправильные поля, но не в поле пользователя или ник.

Исправлено: браузер автоматически загружается в режиме readonly и настраивается для записи в фокусе

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

(фокус = при щелчке мыши и табуляции по полям)

Обновление: 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();  }" />

Live Demo https://jsfiddle.net/danielsuess/n0scguv6/ //UpdateEnd

Объяснение: Браузер автоматически заполняет учетные данные в неправильном текстовом поле?

@Samir: Chrome автоматически заполняет любой ввод с помощью типа пароля, а затем независимо от ввода до

Иногда я замечаю это странное поведение в Chrome и Safari, когда есть поля пароля в той же форме. Я думаю, браузер ищет поле пароля для вставки сохраненных учетных данных. Затем он выполняет автозаполнение имени пользователя в ближайшее текстовое поле ввода, которое появляется перед полем пароля в DOM (просто гадание из-за наблюдения). Поскольку браузер является последним экземпляром, и вы не можете его контролировать,

Это исправленное выше исправление работало для меня.

Ответ 2

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

Есть способы обойти это, хотя они используют спецификацию атрибута autocomplete HTML5.

Как вы увидите в приведенной ниже ссылке, существуют стандартные значения для атрибута autocomplete. Чтобы исключить использование Chrome в поле до того, как пароль будет полем электронной почты, используйте либо одно из официальных значений (например, tel для номера телефона), либо введите значение, которое не существует в списке, но также не off или false.

Google предлагает использовать одно из стандартных значений с new-, добавленным к значению, например, autocomplete="new-tel". Если вы хотите, чтобы поле пароля не было автозаполнено, вы можете использовать autocomplete="new-password", например.

В то время как технически вы, конечно, могли бы сделать атрибут чем-то случайным без контекста с тем же эффектом (например, autocomplete="blahblahblah"), я рекомендую префикс new-, поскольку он помогает любому будущему разработчику, работающему над вашим кодом, в каком-то контексте того, что вы "Выполняя этот атрибут.

Ссылка: https://html.spec.whatwg.org/multipage/forms.html#autofilling-form-controls:-the-autocomplete-attribute

Ответ 3

В HTML5 с атрибутом autocomplete появляется новое свойство "new-password", которое мы можем использовать для этой проблемы. Следующие работы для меня.

<input id="userPassword" type="password" autocomplete="new-password">

текущий пароль: Разрешить браузеру или менеджеру паролей вводить текущий пароль для сайта. Это дает больше информации, чем "on", так как позволяет диспетчеру браузера или администратора паролей использовать текущий пароль для сайта в поле, а не новый.

новый пароль: Разрешить браузеру или менеджеру паролей автоматически вводить новый пароль для сайта. Это может быть автоматически сгенерировано на основе других атрибутов элемента управления или может просто указать браузеру представить виджет "предлагаемого нового пароля".

Refer: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password

Ответ 4

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

Итак, я получил это.

<input type="hidden" name="Password" id="Password" value="Password" /><br />

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

Как отключить его с настройками хромов:

Click the Chrome menu Chrome menu on the browser toolbar.
Select Settings.
Click Show advanced settings and find the "Passwords and forms" section.
Deselect the "Enable Autofill to fill out web forms in a single click" checkbox.

Кредиты идут к хейнкаснеру для этого.

Помимо этих двух методов, я не думаю, что это можно отключить для всех пользователей.

Ответ 5

У Chrome есть обновления, поддельные входы больше не работают.

Кажется, что Chrome запомнил все после успешного 200 сетевого соединения, независимо от того, какой вход [type = password] активирован на экране, будет запомнен.

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

Наконец, я понял:

слушать события фокуса и размытия ввода,

разное разное:

var psw1 = $('input[name=psw1]').val();
$('input[name=psw1]').val((new Array(psw1.length)).join('*'));
$('input[name=psw1]').attr('type', 'text');

каждый раз фокус:

$('input[name=psw1]').attr('type', 'password');
$('input[name=psw1]').val(psw1)

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