Google Chrome автоматически заполняет все вводимые пароли

Моя проблема

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

Автозаполнение регистрации Google с данными для входа

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

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

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

Что я нашел

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

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

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


person Tyler    schedule 18.04.2014    source источник
comment
Попробуйте указать в форме другое скрытое поле пароля. Это грязный прием, но единственное решение, которое мне подходит.   -  person Márcio Souza Júnior    schedule 11.05.2014
comment
Да, это был один из вариантов, который я нашел, но я искал способ, который не является взломом.   -  person Tyler    schedule 29.05.2014
comment
Это сводит меня с ума. Кажется, я не могу найти способ, не связанный с взломом, сообщить Google назначение полей на моих страницах администратора.   -  person ewalk    schedule 06.06.2014
comment
Chrome также может проверять значение метки, а не только имя ввода. Некоторые рекомендуют заменить пароль ‹label›: ‹/label› на что-то вроде ‹label› Pa ‹span› ssword ‹/span›: ‹/label›. У меня не сработало. Я также попробовал очистить значение с помощью jQuery сразу после загрузки страницы - не повезло.   -  person ZurabWeb    schedule 22.09.2014
comment
Пожалуйста, проверьте мой обходной путь здесь: stackoverflow.com/questions/15738259/dispting -chrome-autofill /   -  person Fareed Alnamrouti    schedule 16.03.2016


Ответы (9)


В HTML5 с атрибутом автозаполнения есть новое свойство под названием «новый пароль», которое мы можем использовать для решения этой проблемы. Следующие работы для меня.

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

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

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

Обратитесь: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/password

person PRTJ    schedule 12.09.2017
comment
Примечание. К сожалению, вы не можете динамически изменять поле autocomplete. Если ваше поле пароля меняет роли (возможно, если известный пользователь вводит свой адрес электронной почты), вам следует использовать два поля пароля - по одному каждого типа. [текущий Chrome на сегодняшний день] - person Simon_Weaver; 30.12.2018

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

Однако есть способы обойти это, используя спецификацию атрибута автозаполнения 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

person Rob Porter    schedule 07.02.2017
comment
ничего из этого не работает для меня - person d0rf47; 05.01.2021

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

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

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

Интерактивная демонстрация https://jsfiddle.net/danielsuess/n0scguv6/ // UpdateEnd

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

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

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

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

person dsuess    schedule 14.11.2014
comment
и не забудьте добавить input[readonly] { cursor: text; } в свой CSS - person Juribiyan; 17.06.2016
comment
@dsuess Это решение работает, но тормозит запуск программной клавиатуры на mobile-safari. Всплывающее окно клавиатуры не запускается onfocus, если поле ввода доступно только для чтения. Так что это единственный обходной путь, но он требует затрат, которые я пытаюсь решить прямо сейчас. - person caniaskyouaquestion; 27.10.2016
comment
@caniaskyouaquestion Спасибо, что указали на это. Ознакомьтесь с обновленным скриптом. - person dsuess; 30.10.2016
comment
Это решение действительно работает. Невероятно, как что-то вроде autocomplete = off не работает. Когда я сбрасываю пароль, я не хочу, чтобы старый пароль был установлен в поле Google ... - person Bartando; 24.01.2019
comment
Это отличная реализация, спасибо, что сэкономили мне много часов поиска! - person d0rf47; 05.01.2021

  • поддельные вводы не работают
  • autocomplete = "off" / "new-password" / "false" и т. д. не работают, хром их всех

Решение, которое сработало для нас:

<script>
        $(document).ready(function(){

            //put readonly attribute on all fields and mark those, that already readonly
            $.each($('input'), function(i, el){
                if ($(el).attr('readonly')) {
                    $(el).attr('shouldbereadonly', 'true');
                } else {
                    $(el).attr('readonly', 'readonly');
                }
            });

            //Remove unnecessary readonly attributes in timeout
            setTimeout(function(){

                $.each($('input'), function(i, el){
                    if (!$(el).attr('shouldbereadonly')) {
                        $(el).attr('readonly', null);
                    }
                });

            }, 500);
        });
    </script>

person Denis Matafonov    schedule 18.02.2019
comment
Ух! Это должен быть принятый ответ - у меня есть страница, на которой хром продолжает сбивать предоставленный пользователем токен (не пароль) с неправильным значением, и адаптация этого была единственной вещью, которая сработала - спасибо, чувак! - person Geoff Williams; 12.06.2019

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

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

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

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

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

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.

Кредиты идут Хейнкаснеру за это.

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

person unknownA    schedule 12.08.2014
comment
Спасибо за ответ, однако этот ответ уже предлагался в других темах, на которые я ссылался. Моя цель с этим вопросом состояла в том, чтобы попытаться найти чистое решение, а не обходной путь. - person Tyler; 22.09.2014

У 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)

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

person pimkle    schedule 12.09.2017

Непрозрачность

Мы исправили это, добавив поле и установив его непрозрачность на 0. Так что хром все еще думает, что есть поле, заполняющее его.

    width: 0px !important;
    height: 0px !important;
    opacity: 0 !important;
person bmavus    schedule 15.11.2019

Я заметил, что браузер Chrome / FF ВСЕГДА автоматически заполняет текст, вводимый непосредственно перед полем пароля. Итак, самым простым решением было добавить фиктивный ввод:

person Ian    schedule 08.10.2020

Я справляюсь с этой проблемой с помощью простых js

<input type="password" name="password" class="autocomplete-off" readonly="readonly">

// autocomplete
$('input.autocomplete-off').click(function () {
    $(this).removeAttr('readonly');
});
person Mahdi Bagheri    schedule 23.07.2020