"Автозаполнение = выключено" не работает в браузере Google Chrome

Я знаю, что есть один подобный вопрос в Stackoverflow, но ни одно из решений там не работало.

<form autocomplete="off" id="search_form" method="post" action="">
    <input autocomplete="off" type="text" />
</form>

Как вы можете видеть, я помещал autocomplete=off в BOTH форму и поле ввода, но Google Chrome по-прежнему отображает этот список автозаполнения. Этого не происходит в других браузерах, таких как Firefox и Safari.

Любое другое решение, кроме размещения autocomplete=off в теге формы

Ответ 1

Это может быть ошибка в Google Chrome, вы не можете обманывать, создавая скрытый ввод. Функция автозаполнения получит первый входной текст для заполнения данных.

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" style="display:none" />
    <input autocomplete="off" type="text" />
</form>

Ответ 2

Это связано с дизайнерским решением Chrome (возможно, любой пользователь Chrome хочет этого поведения).

Причиной этого является то, что Google называет приоритет округов:

  • Пользователь - король! Что они хотят больше всего.
  • Пользователь хочет использовать пароль или автозапуск менеджера.
  • В веб-приложении говорится, что он не хочет сохранять значения формы.
  • Выбор пользователя более важен, поэтому значения формы сохраняются.

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

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

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

Лучше всего разрабатывать с предположением, что автозаполнение может работать и учитывать это.

Лично я ненавижу его, когда сайты не помнят мой пароль и переопределяют те, которые работают с расширениями браузера. Однако я также создаю приложения для своей работы, и напоминание о паролях рассматривается как риск для безопасности, поскольку пользователь может оставить свою машину незаблокированной. По моему личному мнению пользователи не блокируют свои машины, это проблема для локальных ИТ, а не для приложения, а локальные ИТ-специалисты могут отключить автозаполнение паролем для всех веб-приложений, если их пользователям нельзя доверять.

К сожалению, для проверки безопасности некоторые приложения по-прежнему вынуждены отключать автозаполнение, есть способы сделать это, но все они ужасные. Первый взлом - сделать ввод пароля совершенно новым:

<input type="hidden" name="password" id="realPassword" />
<input type="password" name="{randomly generated}" 
    onchange="$('#realPassword ').val($(this).val())" />

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

Это решение ломается, если вы правильно создаете ARIA и метки (так как это позволяет браузеру/расширению найти и автозавершить ввод с метки).

Таким образом, вариант 2, также ужасный, заключается в том, чтобы ждать, пока после запуска автозаполнения и не закроет поле:

<input type="text" name="username" 
    onchange="window.setTimeout(function() { 
        $('#password').val('') 
    }, 100)" />
<input type="password" id="password" />

Как я сказал, противно.

Ответ 3

Это, похоже, повторяющаяся проблема в Google Chrome, хотя добавление автозаполнения к форме действительно работало в моей сборке. Возможно, в более новых версиях этого больше нет.

Это взломать. Дайте ваш ввод id, скажем foo и в JavaScript:

if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) {
    setTimeout(function () {
        document.getElementById('foo').autocomplete = 'off';
    }, 1);
}

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

Ответ 4

Атрибут autocomplete является новым в HTML5.

Поскольку вы не упомянули DOCTYPE, я думаю, что это единственная возможная причина. Для получения дополнительной информации проверьте MDN Как отключить автозаполнение формы.

Попробуйте добавить следующие HTML5 DOCTYPE.

<!DOCTYPE html>

FYI: В некоторых браузерах вам может потребоваться активировать autocomplete функции для это работать (смотрите в разделе "Настройки" в меню браузера).

Вы используете его правильно, указав атрибут autocomplete в элементе form. Однако вам не нужно, чтобы это упоминалось отдельно для тега input.

<form autocomplete="off" id="search_form" method="post" action="">
    <input type="text" />
</form>

Обновление: Здесь вы можете найти список решений в атрибут autocomplete и веб-документы с использованием XHTML.

Ответ 5

если вы используете вызов AJAX для отправки данных в бэкэнд. После завершения вызова AJAX поля пароля должны быть четкими. Тогда не будет выведено сообщение сохранения пароля.

Например: $ (# Foo).val( "");

Ответ 6

попробуй это, сработал у меня, немного поработав

if ( navigator.userAgent.toLowerCase().indexOf('chrome') >= 0 ) {
    $('input[autocomplete="off"]').each( function(){
        var type = $(this).attr( 'type');
        $(this).attr( 'type', '_' + type );
        $(this).attr( 'type', type );
    });
}