Вопрос:

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

html browser autocomplete

1063326 просмотра

30 ответа

22294 Репутация автора

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

Автор: Brett Veenstra Источник Размещён: 05.08.2008 04:22

Ответы (30)


2487 плюса

41549 Репутация автора

Решение

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

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

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

<input type="text" name="foo" autocomplete="off" />
Автор: nlucaroni Размещён: 05.08.2008 04:24

17 плюса

14652 Репутация автора

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

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

Автор: sparkes Размещён: 05.08.2008 04:26

11 плюса

45041 Репутация автора

Используйте нестандартное имя и идентификатор для полей, чтобы вместо «name» было «name_». Браузеры не увидят его как поле имени. Самое приятное в этом то, что вы можете сделать это с некоторыми, но не со всеми полями, и он автоматически заполнит некоторые, но не все поля.

Автор: Teifion Размещён: 05.08.2008 04:27

98 плюса

22517 Репутация автора

<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

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

Автор: brendan Размещён: 05.08.2008 04:27

19 плюса

13534 Репутация автора

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

Автор: EndangeredMassa Размещён: 05.08.2008 04:32

21 плюса

15144 Репутация автора

На связанной или на самом деле, на совершенно противоположной ноте -

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

Автор: Antti Kissaniemi Размещён: 08.09.2008 07:29

20 плюса

20149 Репутация автора

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

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

Автор: Jon Adams Размещён: 16.09.2008 03:35

292 плюса

12254 Репутация автора

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

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

Автор: Ben Combee Размещён: 20.10.2008 01:36

58 плюса

11343 Репутация автора

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

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

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

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

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

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

Автор: Sam Hasler Размещён: 23.01.2009 09:21

11 плюса

26963 Репутация автора

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

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

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

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

Автор: cherouvim Размещён: 12.12.2010 06:34

12 плюса

307 Репутация автора

Добавление

autocomplete="off"

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

Проверено на:

  • Firefox 3.5, 4 бета
  • Internet Explorer 8
  • Хром
Автор: Hash Размещён: 11.02.2011 05:14

18 плюса

181 Репутация автора

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

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

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

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

Автор: user631300 Размещён: 23.02.2011 11:24

32 плюса

337 Репутация автора

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

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

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

Автор: Securatek Размещён: 17.09.2011 12:33

10 плюса

125 Репутация автора

попробуйте это тоже, если просто autocomplete="off"не работает:

autocorrect="off" autocapitalize="off" autocomplete="off"
Автор: jeff Размещён: 04.12.2012 06:24

29 плюса

730 Репутация автора

Три варианта: Первый:

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

Во-вторых:

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

В-третьих (код JavaScript):

$('input').attr('autocomplete', 'off');
Автор: yajay Размещён: 19.03.2013 10:05

18 плюса

2489 Репутация автора

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

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

Просто отключите автозаполнение на 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>
Автор: lifo Размещён: 15.08.2013 07:02

218 плюса

4137 Репутация автора

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

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

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

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

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

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

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

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

Автор: apinstein Размещён: 23.04.2014 04:00

141 плюса

4095 Репутация автора

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

Этот обходной путь дополняет пост 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. Поскольку браузер является последним экземпляром, и вы не можете его контролировать,

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

Автор: dsuess Размещён: 16.06.2014 04:04

19 плюса

3028 Репутация автора

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

Вместо того, чтобы autocomplete="off"просто использоватьautocomplete="false"

Это так просто, и это работает как шарм в Google Chrome!

Автор: Kaszoni Ferencz Размещён: 01.05.2015 05:56

10 плюса

859 Репутация автора

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

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

<? $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']);

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

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

Автор: Simmoniz Размещён: 02.06.2015 08:37

9 плюса

197 Репутация автора

Ни один из упомянутых здесь хаков не работал для меня в 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>
Автор: Jakob Løkke Madsen Размещён: 02.07.2015 10:40

11 плюса

36575 Репутация автора

Добавление autocomplete="off"не собирается сокращать это.

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

Автор: Matas Vaitkevicius Размещён: 28.10.2015 04:32

13 плюса

467 Репутация автора

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

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

autocomplete="nope"
Автор: AAH-Shoot Размещён: 22.03.2016 07:38

10 плюса

1941 Репутация автора

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

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

Надеюсь, это кому-нибудь пригодится!

Автор: Ben Размещён: 23.04.2016 11:02

9 плюса

639 Репутация автора

Итак, вот оно:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">

Автор: Stav Bodik Размещён: 29.05.2016 07:57

83 плюса

983 Репутация автора

Решением для 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 ваши изменения вступили в силу, во многих случаях браузеры сохраняют страницу в кеше, у меня сложилось плохое впечатление, что она не работает, но браузер фактически не вносил изменения.

Автор: Geynen Размещён: 24.11.2016 05:07

16 плюса

2267 Репутация автора

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

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

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

Автор: Muhammad Awais Размещён: 30.12.2016 03:05

13 плюса

7488 Репутация автора

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

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и т.д. , и работать без каких - либо проблем. Надеюсь это поможет...

Автор: Murat Yıldız Размещён: 01.11.2017 01:26

13 плюса

2515 Репутация автора

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

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

<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

Автор: Cava Размещён: 20.03.2018 04:31

27 плюса

847 Репутация автора

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

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

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

Автор: step Размещён: 04.08.2018 02:22
Вопросы из категории :
32x32