Как отключить автозаполнение браузера в поле веб-формы / теге ввода?

2529

Как отключить autocomplete в основных браузерах для определенного input (или form field)?

  • 65
    Еще одно использование включает в себя административные формы для создания или редактирования пользователей; Вы не хотите, чтобы форма была предварительно заполнена вашими текущими учетными данными. Это также относится к формам смены пароля, особенно оставленные пустыми, чтобы сохранить текущий пароль .
  • 1
    В некоторых системах, где тестировщикам приходится вручную вводить много информации снова и снова, было бы полезно иметь параметр, который можно настроить так, чтобы при тестировании вы могли отключить его и просто нажать «tab> стрелка вниз> tab> стрелка вниз и т. «.
Показать ещё 12 комментариев
Теги:
browser
autocomplete

64 ответа

2226
Лучший ответ

Firefox 30 игнорирует autocomplete="off" для паролей, предпочитая вместо этого запрашивать пользователя, должен ли пароль храниться на клиенте. Обратите внимание на следующий комментарий от 5 мая 2014 года:

  • Менеджер паролей всегда запрашивает, хочет ли он сохранить пароль. Пароли не сохраняются без разрешения пользователя.
  • Мы являемся третьим браузером для реализации этого изменения после IE и Chrome.

Согласно документации разработчика Mozilla атрибут элемента формы autocomplete предотвращает кэширование данных форм в старых браузерах.

<input type="text" name="foo" autocomplete="off" />
  • 38
    Это не сработало для меня в Firefox 3.0.3. Мне пришлось поместить атрибут автозаполнения в ФОРМУ, а не во ВХОД.
  • 13
    Автозаполнение определено только в стандартах HTML 5, поэтому оно нарушит все проверки, которые вы выполняете в HTML 4. * ...
Показать ещё 18 комментариев
264

В дополнение к autocomplete=off вы также можете иметь имена полей форм, которые будут рандомизированы кодом, который генерирует страницу, возможно, добавив некоторую строку, относящуюся к сеансу, в конец имен.

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

  • 7
    Это гораздо лучшее решение по сравнению с использованием autocomplete = "off". Все, что вам нужно сделать, это сгенерировать новое имя при каждой загрузке страницы и сохранить это имя в $ _SESSION для будущего использования: $_SESSION['codefield_name'] = md5(uniqid('auth', true));
  • 66
    Нет, это не лучшее решение, потому что источником предпочтения для этого параметра является пользовательский агент, также известный как веб-браузер. Существует разница между поддержкой определенного поведения (которое пытается сделать HTML 5) и его принудительным выбором, принимая решение от имени пользователя, что, по вашему мнению, является «гораздо лучшим решением».
Показать ещё 10 комментариев
205

Большинство основных браузеров и менеджеров паролей (правильно, IMHO) теперь игнорируют autocomplete=off.

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

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

К сожалению, ошибки в реализациях автозаполнения вставляют имя пользователя и/или пароль в неправильные поля формы, вызывая ошибки проверки формы или, что еще хуже, случайно вставляя имена пользователей в поля, которые пользователь намеренно оставил пустым пользователем.

Что веб-разработчик делать?

  • Если вы можете хранить все поля пароля на странице самостоятельно, это отличный старт, поскольку кажется, что наличие поля пароля является основным триггером для автозаполнения пользователя/пароля для ввода. В противном случае прочитайте приведенные ниже советы.
  • Safari замечает, что в этом случае есть два поля пароля и в этом случае отключает автозаполнение, предполагая, что это должна быть форма пароля для изменения, а не форма входа в систему. Поэтому просто обязательно используйте 2 поля пароля (новые и подтвердите новые) для любых форм, где вы разрешаете
  • Chrome 34, к сожалению, будет пытаться автоматически заполнять поля с помощью пользователя/пароля всякий раз, когда он видит поле пароля. Это довольно плохая ошибка, которая, надеюсь, изменит поведение Safari. Однако, добавление этого в начало вашей формы, кажется, отключает автозаполнение пароля:

    <input type="text" style="display:none">
    <input type="password" style="display:none">
    

Я еще не исследовал IE или Firefox полностью, но буду рад обновить ответ, если у других есть информация в комментариях.

  • 4
    что вы подразумеваете под "добавлением этого на страницу, кажется, отключить автозаполнение для страницы:"
  • 4
    @wutzebaer, Chrome замечает скрытое поле пароля и останавливает автозаполнение. Как сообщается, это предотвращает кражу паролем информации без уведомления пользователя.
Показать ещё 15 комментариев
134

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

Это обходное решение в дополнение к сообщению apinstein о поведении браузера.

исправить автозаполнение браузера в режиме "только для чтения" и установить запись в фокусе (щелчок и вкладка)

 <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

Потому что браузер автоматически заполняет учетные данные в неправильном текстовом поле !?

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

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

  • 7
    Если нет никакого javascript, тогда вся форма терпит неудачу. -1
  • 6
    @JimmyKane ключом было бы также добавить атрибут, используя в первую очередь javascript (чего здесь не сделал dsuess, а просто для полноты).
Показать ещё 8 комментариев
99
<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

Это будет работать в Internet Explorer и Mozilla FireFox, недостатком является то, что он не является стандартом XHTML.

  • 0
    Я заметил, что добавление его к элементу формы не всегда предотвращает его применение к отдельным входам в форме. Поэтому, вероятно, лучше всего поместить его непосредственно на элемент ввода.
  • 14
    На самом деле @sholsinger, лучше всего поместить его как в форму, так и в сам элемент ввода. Таким образом вы покрываете всю нестандартность браузеров.
Показать ещё 2 комментария
66

Решение для Chrome заключается в добавлении autocomplete="new-password" к паролю типа ввода.

Пример:

<form name="myForm"" method="post">
<input name="user" type="text" />
<input name="pass" type="password" autocomplete="new-password" />
<input type="submit">
</form>

Chrome всегда автозаполняет данные, если находит поле типа пароля, достаточно, чтобы указать для этого поля autocomplete = "new-password".

Это хорошо работает для меня.

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

  • 0
    Это работает в Chrome и для других типов полей, а не только для type = "password".
  • 0
    Я использовал его с типами пароля, электронной почты и текста, и это сработало. Я использовал это просто так: autocomplete = "new"
Показать ещё 3 комментария
53

Как уже говорили другие, ответ autocomplete="off"

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

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

Особенно важно отключить его в полях для кодов безопасности кредитных карт. Как говорится на этой странице:

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

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

  • 7
    если бы я зашел на сайт, и он запомнил мою карточку в выпадающем меню, я был бы очень несчастен. Я начинаю удивляться, как они могут быть такими небрежными.
  • 6
    Гораздо проще / более критический случай. Когда я захожу на страницу пользователя в административной части моего сайта, он пытается установить их имя пользователя и пароль в качестве моего имени пользователя и пароля администратора, не имея возможности сказать, что это не форма входа в систему. Я хочу, чтобы мой пароль администратора запомнился, но это критическая ошибка, когда он пытается применить запомненное имя пользователя / пароль ко всем пользователям, которые я затем редактирую.
29

Мне пришлось бы просить отличаться от тех ответов, которые говорят, чтобы избежать отключения автоматического завершения.

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

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

  • 0
    Только что дошло до моего сведения, что IE не запускает события onChange при заполнении текстового ввода с помощью автозаполнения. У нас есть десятки форм и более тысячи событий onChange (проверки входных данных, бизнес-логика), разбросанных по ним. Недавно мы обновили IE до новой версии, и неожиданно начали происходить странные вещи. К счастью, у нас запущено приложение для внутренней сети, и автозаполнение не является для нас проблемой UX, его проще просто отключить.
  • 3
    Если локальная машина пользователя скомпрометирована, они ввернуты, точка. На нем может быть установлен кейлоггер, может быть добавлен поддельный корневой сертификат SSL и все, что отправлено через фальшивый прокси и т. Д. У меня есть реальная причина отключить автозаполнение - когда я вхожу в систему как администратор и захожу на страницу редактирования пользователя, он назначает этот пользователь мой админ имя пользователя и пароль. Мне нужно предотвратить это поведение.
Показать ещё 2 комментария
27

Три варианта: Сначала:

<input type='text' autocomplete='off' />

Второе:

<form action='' autocomplete='off'>

Третий (код javascript):

$('input').attr('autocomplete', 'off');
  • 2
    Первый и второй параметры должны быть одним из вариантов, поскольку они зависят от того, как браузеры обрабатывают это.
  • 0
    Попробовал $ formElement.attr ('автозаполнение', 'выкл'); и это не работает.
18

Я пробовал бесконечные решения, и тогда я нашел это:

Вместо autocomplete="off" просто используйте autocomplete="false"

Просто так, и он работает как шарм в Google Chrome.

  • 0
    Как вы сказали в chrome, значение off не работает. Это должно быть "ложным"
  • 6
    Это не работает в Chrome 43
Показать ещё 2 комментария
18

На связанную или фактически, совершенно противоположную ноту -

"Если вы являетесь пользователем вышеупомянутой формы и хотите снова включить функцию автозаполнения, используйте" заведомо пароль "на этой странице букмарклетов. Он удаляет все атрибуты autocomplete="off" из всех форм на странице. борьба с хорошей борьбой! "

18

Просто установите autocomplete="off". Для этого есть очень веская причина: вы хотите предоставить свои собственные функции автозаполнения!

17

Ни один из решений не работал у меня в этом разговоре.

Наконец-то я понял, что чистый HTML-решение, для которого требуется нет Javascript, работает в современных браузерах (кроме IE, нужно было хотя бы 1 catch, правда?), и не требует от вас отключения автозаполнения для всей формы.

Просто отключите автозаполнение на form, а затем включите его для любого input, который вы хотите, чтобы он работал в форме. Например:

<form autocomplete="off">
    <!-- these inputs will not allow autocomplete and chrome 
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- this field will allow autocomplete to work even 
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>
17

Я думаю, что autocomplete=off поддерживается в HTML 5.

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

Это менее удобно для пользователей и даже не проблема безопасности в OS X (упомянутый Сореном ниже). Если вы беспокоитесь о том, что люди, у которых их пароли украдены удаленно, - регистратор нажатий клавиш все еще может это сделать, даже если ваше приложение использует autcomplete=off.

Как пользователь, который хочет, чтобы браузер помнил (большую часть) мою информацию, мне было бы неприятно, если бы ваш сайт не помнил мою.

17

Мы действительно использовали идею sasb для одного сайта. Это было веб-приложение для медицинского программного обеспечения для работы в офисе врача. Тем не менее, многие из наших клиентов были хирургами, которые использовали множество разных рабочих станций, в том числе полупубличных терминалов. Таким образом, они хотели удостовериться, что врач, который не понимает значения автоматически сохраненных паролей или не обращает внимания, не может случайно оставить свою регистрационную информацию легко доступной. Конечно, это было до идеи частного просмотра, который начинает отображаться в IE8, FF3.1 и т.д. Несмотря на это, многие врачи вынуждены использовать старые школьные браузеры в больницах с ИТ, которые не изменятся.

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

15

Был нестандартный способ сделать это (я думаю, Mozilla и Internet Explorer по-прежнему поддерживают его), но возиться с ожиданиями пользователей - плохая идея.

Если пользователь вводит данные своей кредитной карты в форме, а затем позволяет кому-то другому использовать этот браузер, это не ваша проблема. :)

  • 1
    Насколько я помню, большинство браузеров не используют автозаполнение, даже если оно включено при выполнении чего-либо через HTTPS. Если ваши пользователи введут данные своей кредитной карты в форму, которая будет отправлена через HTTP, они могут столкнуться с большими проблемами, чем автозаполнение.
  • 21
    и это ваша проблема, если кто-то обманут и обвинит вас, потому что вы были единственным торговцем, которому они дали карту
Показать ещё 1 комментарий
13

Это работает для меня.

<input name="pass" type="password" autocomplete="new-password" />

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

  • 0
    это работает для меня.
  • 0
    это должен быть последний ответ. единственный ответ, который работает для меня в последнем Chrome
12

Лучшее решение:

Запретить автозаполнение имени пользователя (или электронной почты) и пароля:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

Запретить автозаполнение поля:

<input type="text" name="field" autocomplete="nope">

Объяснение: autocomplete продолжает работу в <input>, autocomplete="off" не работает, но вы можете изменить off к случайной последовательности, как nope.

Работает в:

  • Хром: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 и 64

  • Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 и 58

  • 2
    Я нашел это, чтобы работать в моем предварительном тестировании. Так странно, что «выкл» не работает.
  • 0
    Это не работает для Chrome на Android. Я попытался установить строковые значения для атрибута autocomplete и он по-прежнему отображает предыдущие записи в качестве предложений автозаполнения под вводом.
Показать ещё 2 комментария
11

Немного поздно в игре... но я просто столкнулся с этой проблемой и попробовал несколько сбоев, но этот работает для меня на MDN

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

autocomplete="nope"
11

Добавление

autocomplete="off"

в тег формы отключит автозаполнение браузера (что ранее было введено в это поле) из всех полей input в этой конкретной форме.

Протестировано:

  • Firefox 3.5, 4 BETA
  • Internet Explorer 8
  • Chrome
10

Я решил бесконечную борьбу с Google Chrome с использованием случайных символов.

<input name="name" type="text" autocomplete="rutjfkde">

Надеюсь, что это поможет другим людям.

  • 1
    Хорошо работает на моих формах.
  • 0
    Это работает даже лучше. Вы можете добавить небольшой JS, который генерирует случайный код для каждой загрузки страницы, и добавить этот код в поле ввода: <code> function autoId () {var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; for (var i = 0; i <12; i ++) {autoId + = dict.charAt (Math.floor (Math.random () * dict.length)); } return autoId; } $ ('. autocompleteoff'). attr ('autocomplete', autoId ()); </ code> Вы можете добавить класс autocompleteoff в желаемое поле ввода.
Показать ещё 4 комментария
10

Попробуй добавить

readonly onfocus = "this.removeAttribute('readonly');"

в дополнение к

автозаполнения = "выключено"

на ввод (ы), которые вы не хотите запоминать данные формы (username, password и т.д.), как показано ниже:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >


Обновление: ниже приведен полный пример, основанный на этом подходе, который предотвращает перетаскивание, копирование, вставку и т.д.

<input type="text" name="UserName" style="text-transform:lowercase;" placeholder="Username" 
    autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" 
    oncopy="return false" ondrag="return false" ondrop="return false" 
    onpaste="return false" oncontextmenu="return false" > 

<input type="password" name="Password" placeholder="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" oncopy="return false" ondrag="return false" 
    ondrop="return false" onpaste="return false" oncontextmenu="return false" >

Протестировано на последних версиях основных браузеров, таких как Google Chrome, Mozilla Firefox, Microsoft Edge и т.д., И работает без проблем. Надеюсь это поможет...

  • 1
    Для меня в IE11 я не могу набрать текстовое поле даже после того, как onfocus удаляет атрибут readonly. Однако, если я нажму второй раз на текстовое поле, я смогу напечатать.
  • 0
    Я столкнулся с той же проблемой с IE11 (не могу печатать до второго фокуса). Добавление размытия, а затем фокус снова работает. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
Показать ещё 2 комментария
10

Добавление autocomplete="off" не режет его.

Измените атрибут типа ввода на type="search".
Google не применяет автоматическое заполнение к входам с типом поиска.

  • 4
    Это взломать Поле не является полем поиска. В будущем это может вызвать проблемы.
10

Во избежание недопустимого XHTML вы можете установить этот атрибут с помощью javascript. Пример использования jQuery:

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

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

  • 36
    это не устраняет недействительный xhtml, просто динамически добавляет недопустимый бит после того, как вы проверили его, он объявил его действительным!
  • 0
    @Andiih: Так есть ли способ заставить автозаполнение работать в xhtml?
Показать ещё 1 комментарий
9

Используйте нестандартное имя и идентификатор для полей, поэтому вместо имени введите "name_". Браузеры тогда не будут рассматривать это как поле имени. Лучшая часть этого - это то, что вы можете сделать это для некоторых, но не для всех полей, и будет автозаполнять некоторые, но не все поля.

  • 0
    Проблема в том, что если другие сайты используют «name_» для достижения той же цели, вы возвращаетесь к исходной точке.
  • 3
    так что сделайте это "mysite_name". Если кто-то еще использует это, я бы задал им вопросы ...
Показать ещё 1 комментарий
8

Я не могу поверить, что это все еще проблема до тех пор, пока не сообщается. Вышеупомянутые решения не сработали для меня, поскольку сафари, казалось, знали, когда элемент не был отображен или вне экрана, однако для меня это работало:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

Надеюсь, что это полезно для кого-то!

  • 1
    Таким образом, поставить это до фактических полей имени пользователя и пароля сработало? браузер заполнил те а не настоящие
8

Это проблема безопасности, которую браузеры игнорируют сейчас. Браузеры идентифицируют и хранят контент с использованием имен ввода, даже если разработчики считают, что информация чувствительна и не должна храниться. Создание имени входа, отличного от 2 запросов, решит проблему (но будет сохранено в кеше браузера, а также увеличит кеш браузера). Попросить пользователя активировать или деактивировать параметры в настройках браузера не является хорошим решением. Проблема может быть исправлена в бэкэнд.

Вот мое исправление. Подход, который я реализовал в своих рамках. Все элементы автозаполнения генерируются со скрытым входом следующим образом:

<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<? echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

Затем сервер обрабатывает пост-переменные следующим образом:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

Значение можно получить, как обычно

var_dump($_POST['username']);

И браузер не сможет предложить информацию из предыдущего запроса или от предыдущих пользователей.

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

8

попробуйте их, если только autocomplete="off" не работает:

autocorrect="off" autocapitalize="off" autocomplete="off"
7

Ни один из упомянутых здесь хакеров не работал в Chrome. Здесь обсуждается проблема: https://code.google.com/p/chromium/issues/detail?id=468153#c41

Добавление этого внутри <form> работает (по крайней мере на данный момент):

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
  • 1
    Обратите внимание, что при использовании этого метода FireFox все равно будет автоматически заполнять это скрытое поле, которое будет включено при отправке формы. Скорее всего, это будет плохо, так как пароль будет передан через потенциально незащищенное соединение. К счастью, добавление maxlength="0" не позволяет firefox maxlength="0" поле.
6

Итак, вот он:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">
  • 1
    Похоже, хорошая идея, если стиль текстовых полей для предотвращения вспышки видимого пароля.
  • 1
    Большое спасибо, это сделало работу +1, мой вариант вашего решения состоял в том, чтобы сделать его одной строкой: <input oninput = "this.type = 'password'" id = "inputpassword" type = "text">
Показать ещё 1 комментарий
6

Вы можете использовать на входе.

Например:

<input type=text name="test" autocomplete="off" />
5

Нет поддельных входов, нет javascript!

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

<style type="text/css">
    @font-face {
        font-family: 'PasswordDots';
        src: url('text-security-disc.woff') format('woff');
        font-weight: normal;
        font-style: normal;
    }

    input.password {
        font-family: 'PasswordDots' !important;
        font-size: 8px !important;
    }
</style>

<input class="password" type="text" spellcheck="false" />

Загрузить: text-security-disc.woff

Вот как выглядит мой окончательный результат:

Изображение 2568

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

4

Многие современные браузеры больше не поддерживают autocomplete = "off" для полей входа. autocomplete="new-password" вместо wokring, больше информации MDN docs

  • 0
    не работает в Chrome в любом случае
4

Вы можете просто поместить autocomplete="off" в поля HTML, как следующий код.

<input type="text" name="" value="" autocomplete="off" />
  • 0
    не работает для браузеров в эти дни
4

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

4

Chrome планирует поддерживать это.

В настоящее время лучшим предложением является использование типа ввода, который редко автозаполняется.

chrome обсуждение

<input type='search' name="whatever" />

для совместимости с firefox, используйте обычный autocomplete = 'off'

<input type='search' name="whatever" autocomplete='off' />
3

Чтобы решить эту проблему, я использовал некоторые трюки CSS, и для меня это работает.

input {
    text-security:disc;
    -webkit-text-security:disc;
    -mox-text-security:disc;
}

Пожалуйста, прочитайте эту статью для более подробной информации.

3

Я использую этот TextMode="password" autocomplete="new-password" и на странице загрузки в aspx txtPassword.Attributes.Add("value", '');

3

Моя проблема была в основном автозаполнением с Chrome, но я думаю, что это, вероятно, более проблематично, чем автозаполнение.

Трюк: использование таймера в форме reset и установка полей пароля для пустых. Продолжительность 100 мс минимальна для работы.

$(document).ready(function() {
    setTimeout(function() {
        var $form = $('#formId');
        $form[0].reset();
        $form.find('INPUT[type=password]').val('');
    }, 100);
});
  • 0
    Не помогает со значениями по умолчанию, но это идея, так как вы могли бы отслеживать и заменять значения теми, которые были там изначально, я полагаю.
3

Ответ dsuess, отправленный с помощью readonly, был очень умным и работал. Но поскольку я использую boostrap, поле ввода только для чтения было - до тех пор, пока оно не сфокусировано - отмечено серым фоном. Пока документ загружается, вы можете обмануть браузер, просто заблокировав и разблокировав вход.

Итак, у меня возникла идея реализовать это в решении jQuery:

    jQuery(document).ready(function () {
        $("input").attr('readonly', true);
        $("input").removeAttr('readonly');
   });
3

Если ваша проблема связана с автоматическим заполнением поля пароля, вы можете найти это полезным...

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

<!-- This is a fake password input to defeat the browser autofill behavior -->
<input type="password" id="txtPassword" style="display:none;" />
<!-- This is the real password input -->
<input type="password" id="txtThisIsTheRealPassword" />

Обратите внимание, что в Firefox и IE достаточно просто ввести любой ввод пароля типа перед фактическим, но Chrome просмотрел его и заставил меня фактически называть ввод фальшивого пароля (давая ему очевидный идентификатор пароля) заставить его "укусить". Я использовал класс для реализации стиля вместо использования встроенного стиля, поэтому попробуйте, если приведенное выше не работает по какой-либо причине.

3

Это то, что мы назвали автозаполнением текстового поля. Изображение 2569 Мы можем отключить автозаполнение текстового поля двумя способами -

  • Обозначение браузера
  • По коду

    Чтобы отключиться в браузере, перейдите к настройке

    Изображение 2570

Изображение 2571

Перейдите к настройке предварительной настройки и снимите флажок и затем Восстановите.

Если вы хотите отключить ярлык кодирования, вы можете сделать следующее: Используя AutoCompleteType="Disabled":

<asp:TextBox runat="server" ID="txt_userid" AutoCompleteType="Disabled"></asp:TextBox>  

Установив форму autocomplete="off":

<asp:TextBox runat="server" ID="txt_userid" autocomplete="off"></asp:TextBox> 

Установив форму autocomplete="off":

<form id="form1" runat="server" autocomplete="off">  
    //your content
</form>  

Используя код на странице .cs

protected void Page_Load(object sender, EventArgs e)  
    {  
    if(!Page.IsPostBack)  
    {  


        txt_userid.Attributes.Add("autocomplete", "off");  

    }  
}  

Используя JQuery

head runat="server">  
<title></title>  
<script src="Scripts/jquery-1.6.4.min.js"></script>  
<script type="text/javascript">  
    $(document).ready(function () {  
        $('#txt_userid').attr('autocomplete', 'off');  

    });  

</script>  
3
<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        try {
            $("input[type='text']").each(function(){
                           $(this).attr("autocomplete","off");
                        });
        }
        catch (e)
        { }
    });

</script>
  • 0
    Чем это отличается от установки в html значения autocomplete = off, что в наши дни не работает?
2

Чтобы предотвратить автоматическое заполнение браузера с помощью учетных данных для входа в систему пользователя, поместите поле ввода текста и пароля в верхней части формы с непустыми значениями и введите "position: absolute; top: -999px; left: -999px" set чтобы скрыть поля.

<form>
  <input type="text" name="username_X" value="-" tabindex="-1" aria-hidden="true" style="position: absolute; top: -999px; left:-999px" />
  <input type="password" name="password_X" value="-" tabindex="-1" aria-hidden="true" style="position: absolute; top: -999px; left:-999px" />
  <!-- Place the form elements below here. -->
</form>

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

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

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

Для более новых браузеров, которые соответствуют html 5.3, значение атрибута автозаполнения "new-password" должно работать.

<form>
  <input type="text" name="username" value="" />
  <input type="password" name="password" value="" autocomplete="new-password" />
</form>

Комбинация двух методов может использоваться для поддержки как старых, так и более новых браузеров.

<form>
  <div style="display:none">
    <input type="text" readonly tabindex="-1" />
    <input type="password" readonly tabindex="-1" />
  </div>
  <!-- Place the form elements below here. -->
  <input type="text" name="username" value="" />
  <input type="password" name="password" value="" autocomplete="new-password" />
</form>
2

Google Chrome игнорирует атрибут autocomplete="off" для определенных входов, включая ввод пароля и общие входы, обнаруженные по имени.

Например, если у вас есть вход с address имени, то Chrome предоставит предложения автозаполнения по адресам, address на других сайтах, даже если вы не скажете:

<input type="string" name="address" autocomplete="off">

Если вы не хотите, чтобы Chrome делал это, вы можете переименовать или namespace имя поля формы:

<input type="string" name="mysite_addr" autocomplete="off">

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

<input type="string" name="mysite_addr" autocomplete="on">
2

Я смог остановить Chrome 66 от автозаполнения, добавив два поддельных входа и придав им абсолютную позицию:

<form style="position: relative">
  <div style="position: absolute; top: -999px; left: -999px;">
    <input name="username" type="text" />
    <input name="password" type="password" />
  </div>
  <input name="username" type="text" />
  <input name="password" type="password" />

Сначала я попробовал добавить display:none; к входам, но Chrome игнорировал их и автоматически просматривал видимые.

2

Попробуйте следующее:

<input type='text' autocomplete='off' />
2

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

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

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

  • Поместите три экземпляра каждого поля формы в форму и скройте первый и последний поля каждого набора с помощью css, а затем отключите их после загрузки страницы с помощью javascript. Это делается для предотвращения автоматического заполнения браузером полей.

Вот скрипка, демонстрирующая javascript, css и html, как описано в # 2 https://jsfiddle.net/xnbxbpv4/

javascript:

$(document).ready(function() {
    $(".disable-input").attr("disabled", "disabled");
});

css:

.disable-input {
  display: none;
}

html:

<form>
<input type="email" name="username" placeholder="username" class="disable-input">
<input type="email" name="username" placeholder="username">
<input type="email" name="username" placeholder="username" class="disable-input">
<br>
<input type="password" name="password" placeholder="password" class="disable-input">
<input type="password" name="password" placeholder="password">
<input type="password" name="password" placeholder="password" class="disable-input">
<br>
<input type="submit" value="submit">
</form>

Вот пример того, что код сервера, использующий asp.net с бритвой, будет облегчать # 1

модель:

public class FormModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

:

public class FormController : Controller
{
    public ActionResult Form()
    {
        var m = new FormModel();

        m.Username = "F" + Guid.NewGuid().ToString();
        m.Password = "F" + Guid.NewGuid().ToString();

        return View(m);
    }

    public ActionResult Form(FormModel m)
    {
        var u = Request.Form[m.Username];
        var p = Request.Form[m.Password];

        // todo: do something with the form values

        ...

        return View(m);
    }
}

Вид:

@model FormModel

@using (Html.BeginForm("Form", "Form"))
{
    @Html.HiddenFor(m => m.UserName)
    @Html.HiddenFor(m => m.Password)

    <input type="email" name="@Model.Username" placeholder="username" class="disable-input">
    <input type="email" name="@Model.Username" placeholder="username">
    <input type="email" name="@Model.Username" placeholder="username" class="disable-input">
    <br>
    <input type="password" name="@Model.Password" placeholder="password" class="disable-input">
    <input type="password" name="@Model.Password" placeholder="password">
    <input type="password" name="@Model.Password" placeholder="password" class="disable-input">
    <br>
    <input type="submit" value="submit">
}
2

Safari не изменит свое мнение об автозаполнении, если динамически установить autocomplete="off" из javascript. Однако он будет уважать, если вы сделаете это на основе каждого поля.

$(':input', $formElement).attr('autocomplete', 'off');
2

Я знаю, что это старый пост, но может быть важно знать, что Firefox (я думаю, только firefox) использует значение под названием ismxfilled, которое в основном заставляет автозаполнять.

ismxfilled="0" для OFF

или

ismxfilled="1" для ON

1

Если вы хотите, чтобы общий плагин браузера "LastPass" также не заполнял поле автоматически, вы можете добавить атрибут data-lpignore"=true" добавленный к другим предложениям в этой теме. Обратите внимание, что это относится не только к полям пароля.

<input type="text" autocomplete="false" data-lpignore="true" />

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

1

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

Например:

<input type=text name="test" autocomplete="off" />

если вышеуказанный код не работает, попробуйте добавить эти атрибуты также

autocapitalize="off" autocomplete="off"

или

Измените атрибут type="search" ввода на type="search". Google не применяет автоматическое заполнение к входам с типом поиска.

1

autocomplete = 'off' не работал у меня, так или иначе, я установил атрибут value входного поля в пробе, т.е. <input type='text' name='username' value=" ">, который задал входной символ по умолчанию пробелу, а так как имя пользователя было пустым, пароль также был очищен.

1

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

Что касается Internet Explorer 11, есть функция безопасности, которая может быть использована для блокировки автозаполнения. Он работает следующим образом:

Значение ввода любой формы, измененное в JavaScript ПОСЛЕ того, как пользователь уже ввел его, помечается как неприемлемый для автозаполнения.

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

Однако вы можете вставить один специальный символ в начале строки пароля для блокировки автозаполнения. Этот специальный символ может быть обнаружен и удален позже по трубопроводу.

  • 4
    Это ужасное решение, и никто бы не рекомендовал делать это
1

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

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

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

Решение заключалось в том, чтобы установить флажок, вводится ли поле пароля в DOM, а не только его видимость.

Псевдо-реализация для AngularJS:

<input type="checkbox" ng-model="createPassword">
<input ng-if="changePassword" type="password">
1

Я использую следующий фрагмент jQuery:

// Prevent input autocomplete
$.fn.preventAutocomplete = function() {
    this.each(function () {
        var $el = $(this);
        $el
            .clone(false, false)
            .insertBefore($el)
            .prop('id', '')
            .hide()
        ;
    });
};

И чем просто $('#login-form input').preventAutocomplete();

0

Попробуйте добавить фиктивный <input type="text" style="display: none"/> перед вторым вводом.

0

Это сработало для меня как шарм.

  1. Установите для атрибута автозаполнения формы значение off
  2. Добавьте фиктивное поле ввода и установите для его атрибута также значение off.
<form autocomplete="off">
 <input type="text" autocomplete="off" style="display:none">
</form>
0

мы можем использовать jquery для этого для всех браузеров, и есть плагин для этого https://github.com/terrylinooo/jquery.disableAutoFill. Это упрощает работу и в то же время для всех браузеров

0

наконец, я получил решение сначала добавить 2 скрытых текстовых поля

и просто добавьте угловую директиву, подобную этой

 (function () {

    'use strict';

    appname.directive('changePasswordType', directive);

    directive.$inject = ['$timeout', '$rootScope',  '$cookies'];

    function directive($timeout,  $rootScope, $cookies) {
        var directive = {
            link: link,
            restrict: 'A'
        };

        return directive;

        function link(scope,element) {
            var process = function () {
                var elem =element[0];
                elem.value.length > 0 ? element[0].setAttribute("type", "password") :
                element[0].setAttribute("type", "text");
            }

            element.bind('input', function () {
                process();
            });

            element.bind('keyup', function () {
                process();
            });
        }
    }
})()

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

    <input type="text" style="display:none">\\can avoid this 2 lines
    <input type="password" style="display:none">
    <input type="text"  autocomplete="new-password" change-password-type>

NB: не забудьте включить jquery и type ="text" изначально

0

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

0

Исправлена. Просто нужно добавить выше реального поля ввода

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion - MDN https://medium.com/paul-jaworski/turning-off-autocomplete-in-chrome-ee3ff8ef0908 - средний протестированы на EDGE, Chrome (последняя версия v63), Firefox Quantum (57.0.4 64- бит), Firefox (52.2.0) поддельные поля являются обходным путем для автоматической обработки хрома/оперы, получая неправильные поля

 const fakeInputStyle = {opacity: 0, float: 'left', border: 'none', height: '0', width: '0'}

 <input type="password" name='fake-password' autoComplete='new-password' tabIndex='-1' style={fakeInputSyle} />

<TextField
  name='userName'
  autoComplete='nope'
  ... 
/>

<TextField
      name='password'
      autoComplete='new-password'
      ... 
    />
0

Ни один из предоставленных ответов не работал во всех проверенных вами браузерах. Основываясь на уже предоставленных ответах, это то, к чему я пришел (протестирован) на Chrome 61, Microsoft Edge 40 (EdgeHTML 15), IE 11, Firefox 57, Opera 49 и Safari 5.1. Это бесстыдно в результате многих испытаний; однако это работает для меня.

<form autocomplete="off">
    ...
    <input type="password" readonly autocomplete="off" id="Password" name="Password" onblur="this.setAttribute('readonly');" onfocus="this.removeAttribute('readonly');" onfocusin="this.removeAttribute('readonly');" onfocusout="this.setAttribute('readonly');" />
    ...
</form> 

<script type="text/javascript">
    $(function () {           
        $('input#Password').val('');
        $('input#Password').on('focus', function () {
        if (!$(this).val() || $(this).val().length < 2) {
            $(this).attr('type', 'text');
        }
        else {
            $(this).attr('type', 'password');
        }
    });
    $('input#Password').on('keyup', function () {
        if (!$(this).val() || $(this).val().length < 2) {
            $(this).attr('type', 'text');
        }
        else {
            $(this).attr('type', 'password');
        }
    });
    $('input#Password').on('keydown', function () {
        if (!$(this).val() || $(this).val().length < 2) {
            $(this).attr('type', 'text');
        }
        else {
            $(this).attr('type', 'password');
        }
    });
</script>
-17

Почему вы делаете свою жизнь менее удобной?

"Пароли/данные кредитной карты и т.д. не должны быть сохранены" - это плохой аргумент: при автозаполнении браузеры в Mac OS X хранят такие значения в зашифрованной базе данных с разрешениями для каждого приложения. И наоборот, каков реалистичный эффект autocomplete=off? Пользователь собирается записать его в незашифрованном текстовом файле или, еще лучше, на заметку, прикрепленную к экрану.

Хорошо, что там есть такие закладки, как упомянутый Антти, и патчи, чтобы заставить движок игнорировать атрибут вообще.

Серьезно, я настоятельно призываю вас пересмотреть использование этого атрибута. Это никому не выгодно.
  • 37
    Вы неправы. Один анекдот: В крошечных полях ввода, таких как регуляторы кол-во корзины, всплывающее окно предыдущих записей фактически скрывает текстовое поле хотя бы в одном браузере. Кроме того, зачем вам показывать их предыдущее количество? Использование этого атрибута делает жизнь пользователя более удобной. Это не черно-белая проблема. Есть ситуации, в которых это полезно, и в ситуациях, когда это плохо. Призывали ли вы людей быть осторожнее с использованием этого атрибута и перечислили несколько неинтуитивных причин, почему; этот ответ был бы довольно полезен.
  • 0
    Например, у меня есть несколько полей ввода, где пользователь должен вставить MAC-адрес, где вы должны иметь возможность вставлять только шестнадцатеричные символы ... это действительно раздражает, когда вы видите предложения, которые не имеют смысла. Также еще один случай, с которым я столкнулся ... при использовании планшетов Samsung попробуйте ввести имя пользователя для формы. Для некоторых планшетов вы получаете предложения там, вы никогда не хотите этого.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню