При использовании xhtml1-transitional.dtd
doctype, собирая номер кредитной карты со следующим HTML
<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>
отметит предупреждение на валидаторе W3C:
нет атрибута "автозаполнение".
Существует ли W3C / стандартный способ отключить автозаполнение браузера для чувствительных полей в форме?
Ответы:
Вот хорошая статья из MDC, которая объясняет проблемы (и решения) для формирования автозаполнения. Microsoft опубликовала нечто подобное и здесь .
Если честно, если это что-то важное для ваших пользователей, то «нарушение» стандартов таким образом представляется целесообразным. Например, Amazon довольно часто использует атрибут autocomplete, и, похоже, он работает хорошо.
Если вы хотите полностью удалить предупреждение, вы можете использовать JavaScript, чтобы применить атрибут к браузерам, которые его поддерживают (IE и Firefox являются важными браузерами), используя
someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );
Наконец, если ваш сайт использует HTTPS, IE автоматически отключает автозаполнение (как и некоторые другие браузеры, насколько я знаю).
Обновить
Поскольку этот ответ по-прежнему вызывает немало голосов, я просто хотел отметить, что в HTML5 вы можете использовать атрибут autocomplete для элемента формы. Смотрите документацию по W3C.
источник
autocomplete
можно использовать не только дляform
элемента , но иoff
значение работает как минимум вchromium-40.0.2214.115
Я был бы очень удивлен, если бы W3C предложил способ, который будет работать с (X) HTML4. Функция автозаполнения полностью основана на браузере и была представлена в последние годы (задолго до того, как был написан стандарт HTML4).
Не удивлюсь, если у HTML5 будет такой.
Изменить: Как я думал, HTML5 делает есть что особенность. Чтобы определить свою страницу как HTML5, используйте следующий тип документа (то есть: поместите это как самый первый текст в вашем исходном коде). Обратите внимание, что не все браузеры поддерживают этот стандарт, так как он все еще находится в черновом варианте.
источник
HTML 4 : нет
HTML 5 : да
Ссылка: W3
источник
Нет, но автозаполнение браузера часто вызывается полем, имеющим тот же
name
атрибут, что и поля, которые были ранее заполнены. Если бы вы могли найти хитроумный способ получить случайное имя поля , автозаполнение не смог бы получить ранее введенные значения для поля.Если бы вы дали полю ввода имя типа "
email_<?= randomNumber() ?>
", а затем получили скрипт, который получает этот цикл данных через переменные POST или GET, ища что-то, совпадающее с шаблоном "email_[some number]
", вы можете выполнить это, и это будет иметь ( практически) гарантированный успех вне зависимости от браузера .источник
Нет, хорошая статья здесь, в Mozila Wiki .
Я бы продолжил использовать инвалида
attribute
. Я думаю, что именно здесь прагматизм должен победить проверку.источник
Как насчет установки его с помощью JavaScript?
Это не идеально, но ваш HTML будет действительным.
источник
Я предлагаю поймать все 4 типа ввода:
Ссылка:
источник
:input
тоже использоватьЕсли вы используете jQuery, вы можете сделать что-то вроде этого:
и используйте класс autocompleteOff, где вы хотите:
Если вы хотите, чтобы ВСЕ ваши входные данные были
autocomplete=off
, вы можете просто использовать это:источник
autocomplete
атрибута (недопустимого) иначе, чем в html$('input.autocompleteOff').val('');
который, кажется, в порядке.Другой способ - который также поможет с безопасностью - каждый раз, когда вы его отображаете, вызывать поле ввода как-то по-другому: как капту. Таким образом, сеанс может читать только одноразовый ввод, и автозаполнению больше нечего делать.
Еще один вопрос, касающийся вопроса rmeador о том, следует ли вам вмешиваться в работу браузера: мы разрабатываем системы Contact Management и CRM, и когда вы вводите данные других людей в форму, вы не хотите, чтобы они постоянно предлагали ваши собственные данные.
Это работает для наших нужд, но тогда мы можем позволить себе получить хороший браузер :)
источник
autocomplete="off"
это должно решить проблему для всех современных браузеров.В текущих версиях браузеров Gecko атрибут autocomplete работает отлично. В более ранних версиях, начиная с Netscape 6.2, он работал с исключением форм с «Адрес» и «Имя».
Обновить
В некоторых случаях браузер будет продолжать предлагать значения автозаполнения, даже если атрибут автозаполнения отключен. Такое неожиданное поведение может быть довольно загадочным для разработчиков. Хитрость в том, чтобы по-настоящему форсировать отсутствие автозаполнения, состоит в том, чтобы присвоить атрибуту случайную строку , например:
Поскольку это случайное значение не является
valid one
, браузер сдастся.Documetation
источник
Использование случайного атрибута 'name' работает для меня.
Я сбрасываю атрибут имени при отправке формы, чтобы вы могли получить к нему доступ по имени при отправке формы. (используя атрибут id для хранения имени)
источник
Обратите внимание, что существует некоторая путаница с расположением атрибута autocomplete. Его можно применять либо ко всему тегу FORM, либо к отдельным тегам INPUT, и это не было действительно стандартизировано до HTML5 (что явно разрешает оба местоположения ). В более старых документах в этой статье Mozilla упоминается только тег FORM. В то же время некоторые сканеры безопасности будут искать автозаполнение только в теге INPUT и сообщать, если он отсутствует (даже если он находится в родительской ФОРМЕ). Более подробный анализ этого беспорядка размещен здесь: Путаница по атрибутам AUTOCOMPLETE = OFF в формах HTML .
источник
Не идеально, но вы можете изменять идентификатор и имя текстового поля каждый раз, когда вы его визуализируете - вам придется отслеживать его и на стороне сервера, чтобы вы могли получить данные.
Не уверен, сработает ли это или нет, была просто мысль.
источник
Я думаю, что есть более простой способ. Создайте скрытый вход со случайным именем (через javascript) и установите для него имя пользователя. Повторите с паролем. Таким образом, ваш серверный сценарий точно знает, какое имя соответствующего поля, сохраняя автозаполнение в темноте.
Я наверное не прав, но это всего лишь идея.
источник
источник
Это решение работает со мной:
если вы хотите использовать автозаполнение в этом регионе: добавьте
autocomplete="false"
элемент ex:источник
Действительное автозаполнение выключено
источник