"Автозаполнение = выключено" не работает в браузере 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 );
});
}