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

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


person Brett Veenstra    schedule 05.08.2008    source источник
comment
В некоторых системах, где тестировщикам приходится вручную вводить много информации снова и снова, может быть полезно иметь возможность настраивать эту опцию, чтобы при тестировании вы могли отключить ее и просто нажать вкладку ›стрелка вниз› вкладка ›стрелка вниз и т. Д. . '   -  person Simon_Weaver    schedule 22.11.2009
comment
Попробуйте github.com/terrylinooo/disableautofill.js, он использует JavaScript для пропуска автозаполнения функция из браузера.   -  person Terry Lin    schedule 25.02.2021


Ответы (88)


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

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

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

<input type="text" name="foo" autocomplete="off" />
person nlucaroni    schedule 05.08.2008
comment
У меня это не сработало в Firefox 3.0.3. Мне пришлось поместить атрибут автозаполнения в ФОРМУ, а не во ВХОД. - person Winston Fassett; 12.11.2008
comment
Автозаполнение определено только в стандартах HTML 5, поэтому оно нарушит любые проверки, которые вы выполняете в отношении HTML 4. * ... - person Jrgns; 19.01.2009
comment
@Winston, вы должны поместить его как в форму, так и в сам элемент ввода. Таким образом вы покроете всю нестандартность браузеров. - person AviD; 13.12.2010
comment
И не забудьте отключить расширение autocomplete = on (если вы используете Chrome) перед вы тестируете свое веб-приложение. Иначе ты будешь чувствовать себя такой же глупой, как я. ;) - person Jo Liss; 26.02.2011
comment
Этот вопрос / ответ сейчас может быть старым, но я скажу, что Firefox 15, похоже, вводит пароль, несмотря на autocomplete = off в элементах ввода и формы. Он также заполняет его, даже если вы измените имя и идентификатор поля пароля. Это если пароль уже сохранен. Кажется, теперь это действительно предотвращает сохранение пароля, если он еще не был сохранен. - person mikato; 28.09.2012
comment
Кроме того, KeeFox, расширение Firefox для использования KeePass для хранения ваших паролей, мешает этому и заполняет пароль в любом случае, если он был сохранен ранее. - person Pierre Henry; 05.02.2013
comment
Этот код также запрещает показывать сохраненные имена пользователей и пароли? - person Silvio Delgado; 26.02.2013
comment
Последние версии Firefox ›20 (более старые не тестировались) не запрашивают сохранение имени пользователя и пароля, если в форме указано autocomplete=off. - person unode; 27.02.2014
comment
С помощью jquery: $ (document) .ready (function () {$ ('input [type = text], select'). Val ('')}); - person e-info128; 04.03.2014
comment
Chrome также игнорирует это (для полей пароля) в исправлении кода в феврале 2014 года: groups.google.com/a/chromium.org/forum / #! topic / chromium-dev / - person Simon East; 27.06.2014
comment
Это больше не работает, по крайней мере, для полей логина / пароля. Код в ответе апинштейна все еще работает. - person Sam Watkins; 19.05.2015
comment
Итак, что делать, когда (в хроме) я отключил автозаполнение и использовал случайные атрибуты имени для входных данных и пароль И имени пользователя, который все еще отображается? - person RWolfe; 07.07.2015
comment
Вы должны установить для автозаполнения любое значение, но не включено или выключено. Тогда он фактически отключится. Я знаю, что это верно для Chrome, но я не тестировал его в других браузерах. stackoverflow.com/questions/30053167/autocomplete-off- vs-false / - person camiblanch; 14.07.2015
comment
@swapab больше нет :( - person brandito; 10.04.2018
comment
При динамическом создании формы на стороне сервера установка значения для имени пользователя на вкладке должна предотвратить автоматическое заполнение учетных данных браузером. Хотя все еще предлагает предложения автозаполнения. При получении формы обрежьте вкладку, если пользователь не удалил ее. Если вкладка не работает, попробуйте использовать вертикальную вкладку или другие непечатаемые символы. - person NOYB; 06.07.2018
comment
Для Chrome: autocomplete = nope Это кажется забавным, но работает! Однако это не сработает для Firefox или других браузеров. Для них вы можете добавить autocomplete = off в элемент формы. Если вы используете веб-формы, ваш элемент формы находится на главной странице. - person Amir Tofighi; 08.08.2018
comment
Используя случайные символы, например: ‹input name = name type = text autocomplete = rutjfkde›, хром никогда не запомнит значение. Когда вы генерируете тег ‹input› на бэкэнде, генерируйте случайную строку. Простое рабочее решение. - person step; 27.03.2019
comment
Я обнаружил, что некоторые новейшие интеллектуальные браузеры экстраполируют и принимают решения об автозаполнении на основе ближайшего текстового содержимого в форме. Например, если перед полем ввода text стоит текст «Имя:», то браузеры, такие как Safari, начнут получать предложения из самых отдаленных мест, например из контактной книги вашей ОС. Одно из решений - более умное (читай: идиосинкразическое) именование, чем очевидные варианты, такие как Имя. - person Parapluie; 13.05.2019
comment
для этого ответа может потребоваться обновление developer.mozilla ". org / en-US / docs / Web / Security / - person mh-cbon; 18.06.2019
comment
В последнем firefox (v69.0) я могу отключить автозаполнение только глобально, используя его внутри формы: ‹form autocomplete = off ...› - person gtamborero; 12.09.2019
comment
@AviD На самом деле, правильный способ сделать это - выключить его в форме. Таким образом, он отключит автозаполнение для каждого элемента ввода, и у него не будет никаких резервных выходов автозаполнения. Когда этот параметр отключен в форме, вы все равно можете указать отдельные элементы ввода для их автозаполнения. Будет намного чище. Ваш ответ старый, но я хотел добавить это примечание. - person ravo10; 10.10.2019
comment
@ ravo10 Я надеюсь, что 9 лет спустя эта дурацкая идиосинкразия наконец разрешится :-) - person AviD; 10.10.2019
comment
@AviD Ха-ха, да. - person ravo10; 11.10.2019
comment
Обязательно посмотрите ответ @ Geynen, в котором используется autocomplete = new-password - person splashout; 19.05.2020
comment
Я думаю, что мое решение может обойти все это, так что нам больше не придется беспокоиться о браузерах? по крайней мере, на какое-то время ... возможно, его нужно будет доработать и улучшить, но общая идея есть и, похоже, работает на дату публикации. stackoverflow.com/a/64499109/6730421 - person Adam Whateverson; 23.10.2020
comment
MozillaDoc: «Даже без главного пароля в -управление паролями браузера обычно рассматривается как чистая выгода для безопасности. Поскольку пользователям не нужно запоминать пароли, которые браузер сохраняет для них, они могут выбирать более надежные пароли, чем в противном случае. По этой причине многие современные браузеры не поддерживают autocomplete = off для полей входа « - person tibx; 09.11.2020

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

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

person Ben Combee    schedule 20.10.2008
comment
Это намного лучшее решение по сравнению с использованием autocomplete = off. Все, что вам нужно сделать, это сгенерировать новое имя при каждой загрузке страницы и сохранить это имя в $ _SESSION для будущего использования: $_SESSION['codefield_name'] = md5(uniqid('auth', true)); - person enchance; 13.11.2011
comment
Нет, это не лучшее решение, потому что источником предпочтения для этого параметра является пользовательский агент, также известный как веб-браузер. Существует разница между поддержкой определенного поведения (которое пытается выполнить HTML 5) и принуждением к нему путем принятия решения от имени пользователя, что, по вашему мнению, является гораздо лучшим решением. - person amn; 27.05.2013
comment
Это решение может работать со всеми браузерами, поэтому в этом отношении оно лучше. Тем не менее, amn верен, решение отключить автозаполнение от имени ваших пользователей - не лучшая идея. Это означает, что я бы отключил автозаполнение только в очень конкретных ситуациях, например, когда вы планируете создать свою собственную функцию автозаполнения и не хотите конфликтов или странного поведения. - person macguru2000; 16.05.2014
comment
Что касается атак XSRF, я не уверен, какой тип атаки вы представляли, но не мог ли злоумышленник просто отрезать конечную часть так же, как вы делаете это на стороне сервера, чтобы идентифицировать поля? Или, если злоумышленник публикует поля, не могли ли они добавить свою собственную случайную строку, поскольку она будет удалена сервером? - person xr280xr; 11.02.2015
comment
@ macguru2000 создание собственного автозаполнения - вполне законный и распространенный вариант использования. На самом деле браузер должен упростить разработчикам отключение автозаполнения, когда им нужно, вместо того, чтобы заставлять нас использовать такие хаки. - person whoadave; 06.05.2015
comment
Это не лучшее решение, если вы используете формы MVC, в которых имя должно соответствовать свойствам объекта или модели, в которые вы передаете информацию. - person jezzipin; 27.10.2015
comment
@ xr280xr Нет, если добавляемая строка является идентификатором сеанса (или каким-либо другим сгенерированным значением для конкретного сеанса). Затем идентификаторы ввода POST формы будут проверены на соответствие сеансу, который фактически создал сам HTML. - person Mike U; 12.12.2015
comment
@jezzipin: Вам не нужно использовать модель с MVC. Просто используйте общий параметр FormCollection и получите доступ к именам / значениям. - person Gone Coding; 31.03.2016
comment
Примечание: рандомизация имен полей не помогает в более поздних браузерах IE. Он просто обнаруживает первое поле пароля (с любым именем) и автоматически заполняет поле перед ним. - person Gone Coding; 26.08.2016
comment
Это решение может быть опасным, потому что браузер все равно сохранит эти значения в каком-либо файле, например formhistory.sqlite, точно так же, как обычные значения автозаполнения. - person Gras Double; 09.08.2017
comment
Другой допустимый вариант использования - это создание внутренних корпоративных приложений, которые должны соответствовать правилам информационной безопасности. - person JwJosefy; 16.04.2018
comment
Не могу поверить, что это все еще проблема. Я понимаю, что пользователь должен иметь контроль, однако есть случаи, когда автозаполнение не имеет смысла. Например, последнее, что вам нужно в приложении для ввода данных, т. Е. На стойке регистрации, - это предварительно заполнить последнюю запись. Существует множество вариантов использования корпоративных приложений за пределами стандартной модели оформления заказа в электронной коммерции, для которых Chrome / firefox обслуживают. - person ChronoFish; 12.07.2018
comment
Chrome (и, возможно, другие) в настоящее время, кажется, выводит автозаполнение через атрибут <input> placeholder. Если этот заполнитель содержит "name", он также предложит автозаполнение, независимо от значения атрибута name. Таким образом, это решение не будет работать, если вы хотите остановить автозаполнение для ввода типа <input name="foobar" placeholder="First name">. - person shennan; 04.07.2019
comment
Я использовал эту технику в старом приложении веб-форм ASP.NET, спасибо. У меня есть UserControl, который инкапсулирует текстовое поле, расширенное с помощью jQuery AutoComplete. Автозаполнение браузера скрывает автозаполнение, пока я не добавлю случайное целое число к идентификатору TextBox в обработчике событий Page_Init. После создания это случайное целое число нужно было сохранить как переменную сеанса, потому что Page_Init запускает каждое сообщение обратно и по какой-то причине ViewState недостаточно хорош. - person CAK2; 18.06.2020

Большинство основных браузеров и менеджеров паролей (правильно, ИМХО) теперь игнорируют 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, но буду рад обновить ответ, если у других есть информация в комментариях.

person apinstein    schedule 23.04.2014
comment
что вы имеете в виду, добавив это на свою страницу, похоже, отключает автозаполнение для страницы: - person wutzebaer; 07.05.2014
comment
@wutzebaer, Chrome замечает скрытое поле пароля и останавливает автозаполнение. Как сообщается, это сделано для предотвращения кражи информации о пароле сайтом без ведома пользователя. - person David W; 02.12.2014
comment
Ваш фрагмент кода предотвращает автозаполнение полей входа в систему в Chrome, Firefox, IE 8 и IE 10. Не тестировал IE 11. Хороший материал! Единственный простой ответ, который все еще работает. - person Sam Watkins; 19.05.2015
comment
Как это применимо к другим полям ввода, таким как email или кредитные карты? У нас есть проблема с тем, что браузеры думают, что поле email предназначено для них, тогда как оно для кого-то другого. - person Kelsey Hannan; 24.05.2015
comment
Ваша заметка о сафари, похоже, работает и в Chrome, по крайней мере, по состоянию на декабрь 2015 года. У меня было поле имени пользователя и пароля в регистрационной форме, которое автоматически заполнялось данными из формы входа. Создание двух полей type='password' на одной странице привело к игнорированию автозаполнения пароля сохранения в браузере, что имело смысл, поскольку формы регистрации, как правило, запрашивают пароль дважды, тогда как формы входа запрашивают его только один раз. - person Matt Fletcher; 20.12.2015
comment
Похоже, что больше не работает в Chrome 55, если только дополнительное поле пароля не скрыто, что противоречит цели. - person jokkedk; 10.10.2016
comment
@jokkedk Я обнаружил, что вместо display: none; вы можете использовать position: relative; left: -1000px;, и это помогает мне в Chrome. Технически не скрыт, а просто отображается за кадром. - person crazyloonybin; 18.10.2016
comment
Больше не работает, Chrome 54 автоматически заполняет все найденные поля имени пользователя и пароля. - person Stijn Van Bael; 20.10.2016
comment
@StijnVanBael В Chrome 54 вы можете использовать style="visibility: hidden; height: 0;" Works for me. - person Finrod; 24.10.2016
comment
@Finrod, мне кажется, что искать новые хаки бессмысленно. Вам всегда придется быть на шаг впереди разработчиков Chrome. Если они действительно всегда хотят автоматически заполнять формы создания пользователей, они всегда найдут способ. - person Stijn Van Bael; 24.10.2016
comment
Мне нужно было добавить name="email" и name="password" к input, прежде чем это решение сработало. но это случилось! (хотя я чувствую себя очень грязно, потому что знаю, что браузер выполняет автозаполнение вместо них) - person MoshMage; 10.02.2017
comment
@apinstein, но когда вы создаете форму для администраторов для регистрации пользователей, например, Chrome автоматически заполняет поля имени пользователя и пароля в этой форме, что определенно не является желаемым поведением для такой формы. - person Andy; 30.10.2017
comment
Проблема здесь в том, что сейчас идет война между охранными фирмами и поставщиками браузеров. На голову бедному разработчику. Меня это не волнует, и на самом деле у меня нет твердой позиции, но OWASP и ему подобные должны работать вместе с поставщиками Chrome для определения руководящих принципов. - person JAR.JAR.beans; 22.11.2017
comment
Извините, я не согласен (вообще) с тем, что автозаполнение паролей - хорошая идея - по той очевидной причине, что он позволяет любому подойти к вашему ПК, планшету или другому устройству и увидеть ваш пароль. Еще хуже то, что мы не можем - за исключением постоянно развивающегося и непоследовательного набора браузерных хаков - предотвратить это в ситуациях, когда мы точно знаем, что это плохая идея. Я видел это, когда вводил пароль с помощью функции отображения / скрытия пароля - если вы (или кто-либо другой) решите «Показать» пароль, тогда будет выпадающий список всех паролей, которые были использованы для этого ввода. МОЙ БОГ. - person Geoff Kendall; 28.03.2018
comment
Но @DavidW на веб-сайте уже говорится о том, что вводится и где ... Так работают формы. Мы можем получить доступ к данным, которые пользователи вводят в форму, с запросом сервера / отправкой формы или без него. - person brandito; 29.06.2018
comment
@Brandito, мы хотим скрыть другие конфиденциальные данные, такие как SSN, от людей, заглядывающих через плечо. - person David W; 04.07.2018
comment
Аааааааааааааааааааааааааача болеелядается более или более запутанная часть меня: prevent the site stealing password info without the user noticing - person brandito; 05.07.2018
comment
ИМХО принуждать веб-разработчиков использовать взлом вместо открытого стандарта - это неправильно. Веб-сайты с высоким уровнем безопасности также могут использовать эти хаки. - person dehart; 27.09.2019
comment
Исходный пост относится к полям ввода в целом, без ссылки на поля пароля. Я только что протестировал автозаполнение для стандартного ввода текста в Firefox 70.0.1, и он учитывает атрибут. - person Savage; 20.11.2019
comment
Можете ли вы пояснить (обновив ответ), что такое поле пароля в этом контексте (то есть контекст - это ваш ответ)? Например, это исключительно поле формы input HTML с атрибутом type="password"? Или что-то другое? - person Peter Mortensen; 09.04.2021
comment
Браузеры могут предоставлять варианты автозаполнения always, never или do as page recommends. Затем пользователю может быть разрешено определять это поведение либо для каждого сайта, либо глобально. Просто идея ... Я не изучал этот вопрос подробно. - person Mentalist; 10.06.2021

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

Этот обходной путь дополняет сообщение апинштейна о поведении браузера.

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

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

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

person dsuess    schedule 16.06.2014
comment
Если нет javascript, вся форма не работает. -1 - person Jimmy Kane; 10.07.2014
comment
@JimmyKane, ключом было бы также добавить атрибут с использованием javascript в первую очередь (что dsuess здесь не сделал, а просто добавил для полноты). - person trnelson; 27.03.2015
comment
@tmelson Я понимаю, но все же зачем использовать js даже для отключения? Давайте избегать js для вещей, которые можно улучшить изначально. Опять же, я согласен с вами. - person Jimmy Kane; 27.03.2015
comment
Это не работает прямо в IE8, поле пароля только для чтения недоступно для редактирования при первом фокусировании, только после того, как вы расфокусируете и снова сфокусируетесь. Хорошая идея, но, к сожалению, она слишком хакерская и небезопасная в использовании. - person Sam Watkins; 19.05.2015
comment
Это не работает правильно во всех браузерах (например, IE 11 и IE Edge). Как только readonly будет удален, последующий выбор поля приведет к возврату автозаполнения. - person Gone Coding; 26.08.2016
comment
Это действительно хорошая идея! Только при использовании Bootstrap это создаст серый фон для readonly полей ввода. Удалите это с помощью style="background:none" - person Arnis Juraga; 05.10.2017
comment
Отлично работает на v63 chrome, есть ли проблемы с безопасностью? - person Palaniichuk Dmytro; 18.01.2018
comment
@PalaniichukDmytro Я не знаю никаких «проблем с безопасностью», и последние 3 года этот ответ публикуется, никто не упоминал о каких-либо проблемах с безопасностью. Надеюсь, это поможет :) - person dsuess; 24.01.2018
comment
При использовании этого обходного пути я заметил, что в FF 60.0.1 мне нужно дважды щелкнуть внутри поля пароля, чтобы активировать фокус. - person M. Altmann; 17.05.2018
comment
В моей ситуации пользователь также не должен иметь возможность редактировать, так что это отлично работает! - person wedstrom; 02.03.2019
comment
В некоторых версиях IE вам нужно дважды щелкнуть (сначала сфокусироваться, затем сфокусироваться, я думаю). Я исправил это, добавив событие onmouseover. - person baron_bartek; 05.04.2019

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

person Geynen    schedule 24.11.2016
comment
Это работает в Chrome и для других типов полей, а не только для type = password. - person Jake; 15.12.2017
comment
Я использовал его с паролями, электронной почтой и текстовыми типами, и это сработало. Я использовал это просто так: autocomplete = new - person Crak_mboutin; 16.01.2018
comment
autocomplete = nope name = pswd и использовано ‹input name = dummyPassword type = password style = display: none;› перед полем ввода реального пароля. Это сработало для меня. - person Denuka; 31.01.2019
comment
Примеры: chromium.org/developers/design-documents/ - person IvanRF; 02.07.2019
comment
Сейчас это работает почти во всех браузерах, не только в Chrome: autocomplete # Browser_compatibility. - person Andrew Morton; 07.04.2020
comment
Это лучший ответ на данный момент. См. Дополнительную информацию в конце этой страницы: developer.mozilla. org / en-US / docs / Web / Security / - person splashout; 19.05.2020
comment
autocomplete="new-password" а почему не работает параметр off ?? HTML-атрибуты это действительно лажа. Это работает в браузере Opera! Спасибо. - person Williaan Lopes; 03.07.2020
comment
Работал у меня, .. - person Jatin Mandanka; 08.01.2021

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

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

person brendan    schedule 05.08.2008
comment
Я заметил, что добавление его к элементу формы не всегда предотвращает его применение к отдельным входам в форме. Поэтому, вероятно, лучше всего разместить его непосредственно на элементе ввода. - person sholsinger; 10.05.2010
comment
На самом деле @sholsinger, лучше всего поместить его как в форму, так и в сам элемент ввода. Таким образом вы покроете всю нестандартность браузеров. - person AviD; 13.12.2010
comment
К сожалению, начиная с IE 11, Microsoft больше не уважает это для input type="password". Надеюсь, ни один другой браузер не откажется от этой функции. - person SamHuckaby; 22.03.2014
comment
Установка autocomplete="off" на form - единственное, что сработало для Chrome. - person Andrew; 09.02.2016

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

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

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

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

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

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

person Sam Hasler    schedule 23.01.2009
comment
если бы я пошел на сайт и он вспомнил мою карту в раскрывающемся списке, я был бы очень недоволен. Я начинаю задаваться вопросом, как они могли быть такими беспечными. - person Simon_Weaver; 22.11.2009
comment
Гораздо более простой / критический случай. Когда я захожу на страницу пользователя в административной части моего сайта, он пытается установить их имя пользователя и пароль в качестве моего имени пользователя и пароля администратора, не имея возможности сказать, что это не форма входа. Я хочу, чтобы мой пароль администратора запомнился, но это критическая ошибка, когда он пытается применить запомненное имя пользователя / пароль ко всем пользователям, которых я затем редактирую. - person rjmunro; 17.12.2015

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

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

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

person step    schedule 04.08.2018
comment
Это работает даже лучше. Вы можете добавить небольшой 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 в желаемое поле ввода. - person Raghuram Kasyap; 31.08.2018
comment
не работает в моей версии chrome 68.0.3440.106 (официальная сборка) (64-разрядная версия) - person Sukanya Purushothaman; 06.09.2018
comment
Исправлена ​​ошибка, из-за которой Chrome теперь использует стандартизированное отключение. - person MacK; 17.10.2018
comment
К сожалению, это работает лучше, чем то, что называется стандартным на хроме. - person Nour Lababidi; 04.11.2018
comment
Вы должны генерировать новую случайную строку на каждой странице перезагрузки. - person step; 21.06.2019
comment
Сегодня я обнаружил, что Chrome перезаписывает случайную строку с помощью Off. Не могу поверить, что разработчики Chrome делают этот атрибут плохим и неконтролируемым. Почему ох, мой получил. - person step; 07.10.2019

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

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

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

person Securatek    schedule 17.09.2011
comment
Я только что обратил внимание на то, что IE не запускает события onChange, когда вы вводите текст с помощью автозаполнения. У нас есть десятки форм и более тысячи событий onChange (проверки ввода, бизнес-логика), разбросанных по ним. Недавно мы обновили IE до более новой версии, и внезапно начали происходить странные вещи. К счастью, у нас есть приложение для интрасети, и автозаполнение не является проблемой для нас, проще просто отключить его. - person Robotronx; 09.06.2015
comment
Если локальная машина пользователя скомпрометирована, они облажались, точка. В нем может быть установлен кейлоггер, может быть добавлен поддельный корневой сертификат SSL и все отправлено через ложный прокси и т. Д. У меня есть реальная причина отключить автозаполнение - когда я вхожу в систему как администратор и посещаю страницу редактирования пользователя, он назначает этот пользователь мое имя пользователя и пароль администратора. Мне нужно предотвратить такое поведение. - person rjmunro; 17.12.2015
comment
Производители браузеров, похоже, заботятся о своих интересах. Сохраненные пароли = блокировка пользователя. А включение / выключение автозаполнения было слишком простым - почему бы не использовать сложный стандарт семантических подсказок (html.spec.whatwg.org/multipage/), что, кстати, позволяет браузеру собирать ценные семантические данные с сайтов, которые посещает каждый пользователь? - person aro_tech; 21.11.2017
comment
конкретный вариант использования, который я пытаюсь решить, заключается в следующем: они уже вошли в систему, но теперь они собираются получить доступ к чему-то еще более важному. Я хочу показать диалог, который заставит их повторно пройти аутентификацию, исключив возможность того, что они пошли покурить, а плохой человек сел на их стул. попробовали несколько техник, чтобы обойти автозаполнение, но ничего не помогло. теперь я думаю, может быть, по крайней мере, использовать старый добрый 'password = window.prompt (Пожалуйста, повторно введите свой пароль)' плюс имя пользователя в сеансе, и попытаться аутентифицировать его. - person David; 12.01.2018

Три варианта:

Первый:

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

Второй:

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

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

$('input').attr('autocomplete', 'off');
person yajay    schedule 19.03.2013
comment
Первый и второй варианты должны быть одним вариантом, поскольку это зависит от того, как браузеры это обрабатывают. - person rybo111; 14.06.2015
comment
Пробовал $ formElement.attr ('autocomplete', 'off'); и это не работает. - person Ben Affleck; 01.11.2015

По родственной или совершенно противоположной ноте -

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

person Antti Kissaniemi    schedule 08.09.2008

У меня это работает.

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

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

person Muhammad Awais    schedule 30.12.2016

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

person EndangeredMassa    schedule 05.08.2008

В добавление к

autocomplete="off"

Использовать

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');" >

Надеюсь это поможет.

person Murat Yıldız    schedule 01.11.2017
comment
Для меня в IE11 я не могу вводить текст в текстовое поле даже после того, как onfocus удаляет атрибут readonly. Однако, если я щелкну второй раз в текстовом поле, я могу печатать. - person mcallahan; 10.11.2017
comment
Я столкнулся с той же проблемой с IE11 (не могу печатать до второго фокуса). Добавление размытия и затем фокус снова работает. $(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); }); - person palmsey; 22.02.2018
comment
@ Андрей. Конечно, можно. Это основной принцип решения этой проблемы, и я также добавил обновление, содержащее полный пример кода;) - person Murat Yıldız; 08.11.2018
comment
Я также добавил onfocusout="this.setAttribute('readonly', 'readonly');" - person rinatdobr; 21.06.2019

Я пробовал бесконечные решения, а потом нашел следующее:

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

Все очень просто, и это прекрасно работает и в Google Chrome!

person Fery Kaszoni    schedule 01.05.2015
comment
Как вы сказали в хроме, значение выключения не работает. Это должно быть ложью - person azuax; 14.05.2015
comment
У меня работает на Chrome 44.0.2403.130. - person GuiGS; 13.08.2015
comment
Пробовал это: $ formElement.attr ('autocomplete', 'false'); жаль не работает. - person Ben Affleck; 01.11.2015
comment
Но работает ли это в других браузерах? - person Peter Mortensen; 09.04.2021

Мы действительно использовали идею sasb для одного сайта.

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

Конечно, это было до идеи приватного просмотра, которая стала реализовываться в Internet Explorer 8, Firefox 3.1 и т. Д. Даже в этом случае многие врачи вынуждены использовать старые школьные браузеры в больницах с ИТ, которые не изменятся.

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

person Jon Adams    schedule 16.09.2008
comment
Здесь нет текущего пользователя с именем sasb (в том числе в удаленном ответе). (Хотя комментарии к некоторым удаленным ответам больше не видны.) К какому ответу (или комментарию) они относятся? - person Peter Mortensen; 09.04.2021

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

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

Просто отключите автозаполнение 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>
person lifo    schedule 15.08.2013

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

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

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

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

person user631300    schedule 23.02.2011

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

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

<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.

person Cava    schedule 20.03.2018
comment
Я обнаружил, что это работает в моем предварительном тестировании. Так странно, что выключение не работает. - person Craig Jacobs; 26.03.2018
comment
Это не работает для Chrome на Android. Я пробовал установить строковые значения для атрибута autocomplete, и он по-прежнему отображает предыдущие записи как предложения автозаполнения под вводом. - person tebs1200; 10.08.2018
comment
@ tebs1200 Какой? Поле пароля или текстовое поле? - person Cava; 12.08.2018
comment
@Cava извините за задержку с ответом. Текстовое поле. Неважно, какое значение я установил для autocomplete, я все равно получаю раскрывающийся список предложений на основе ранее введенных значений. Это нормально на рабочем столе, но не на Android Chrome. - person tebs1200; 18.08.2018

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

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

person Teifion    schedule 05.08.2008
comment
Проблема в том, что если какие-либо другие сайты используют name_ для достижения той же цели, тогда вы вернетесь к исходной точке. - person ConroyP; 20.10.2008
comment
так что сделайте это mysite_name. Если кто-то еще этим пользуется, я бы задавал им вопросы ... - person Steve Perks; 13.05.2009
comment
это приводит к сбоям в работе некоторых автоматических заполняемых утилит. - person Simon_Weaver; 22.11.2009

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

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

person Matas Vaitkevicius    schedule 28.10.2015
comment
Это взлом. Поле не является полем поиска. В будущем это могло вызвать неприятности. - person Roel; 31.12.2015

Я только что столкнулся с этой проблемой и попробовал несколько сбоев, но этот у меня работает (находится на MDN):

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

autocomplete="nope"
person AAH-Shoot    schedule 22.03.2016

Добавление

autocomplete="off"

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

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

  • Firefox 3.5, 4 БЕТА
  • Internet Explorer 8
  • Хром
person Hash    schedule 11.02.2011

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

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

person Stav Bodik    schedule 29.05.2016
comment
Похоже, хорошая идея, если стилизовать текстовые поля, чтобы предотвратить мигание видимого пароля. - person Andrew; 08.11.2018
comment
Большое спасибо, это выполнило задание +1, мой вариант вашего решения заключался в том, чтобы сделать это одной строкой: ‹input oninput = this.type = 'password' id = inputpassword type = text› - person Hasnaa Ibraheem; 21.02.2019
comment
@HasnaaIbraheem Спасибо (: иногда лучше читается. - person Stav Bodik; 21.02.2019
comment
Это единственный способ заставить его работать - атрибут только для чтения работал, но испортил порядок табуляции. - person Robin Schaaf; 02.03.2021
comment
Объяснение было бы в порядке. Например, в чем идея / суть? На чем тестировалось (включая версии)? - person Peter Mortensen; 09.04.2021

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

Изменение имени входа для двух запросов решит проблему (но все равно будет сохранено в кеше браузера, а также увеличит кеш браузера).

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

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

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

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

foreach ($_POST as $key => $val) {
    $newKey = preg_replace('~^__autocomplete_fix_~', '', $key, 1, $count);
    if ($count) {
        $_POST[$val] = $_POST[$newKey];
        unset($_POST[$key], $_POST[$newKey]);
    }
}

Доступ к значению можно получить как обычно

echo $_POST['username'];

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

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

person Community    schedule 02.06.2015

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

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

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

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

person cherouvim    schedule 12.12.2010
comment
это не исключает недопустимый xhtml, он просто динамически добавляет недопустимый бит после того, как вы проверили его, он объявил его действительным! - person Andiih; 16.04.2011
comment
@Andiih: Так есть ли способ заставить работать автозаполнение в xhtml? - person cherouvim; 22.04.2011
comment
Работать (или прекратить работу, что является целью): да, как указано выше. Но действительно - нет. - person Andiih; 25.04.2011

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

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>
person Ben    schedule 23.04.2016
comment
Итак, если поставить это перед фактическими полями имени пользователя и пароля? браузер заполнил те, а не настоящие - person Andrew; 08.11.2018

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

autocorrect="off" autocapitalize="off" autocomplete="off"
person jeff    schedule 04.12.2012
comment
autoComplete для React ... 0,02 доллара США - person Neil Guy Lindberg; 13.08.2020

Ни один из упомянутых здесь хаков не помог мне в 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>
person Jakob Løkke Madsen    schedule 02.07.2015
comment
Обратите внимание, что при использовании этой техники FireFox по-прежнему будет автоматически заполнять это скрытое поле, которое будет включено при отправке формы. Скорее всего, это будет плохо, так как пароль будет передаваться по потенциально незащищенному соединению. К счастью, добавление maxlength="0" предотвращает автоматическое заполнение поля Firefox. - person Mikal Schacht Jensen; 07.11.2017

Вы можете использовать его в input.

Например;

<input type=text name="test" autocomplete="off" />
person xxxxx    schedule 02.11.2012

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

person hien    schedule 21.12.2017

Вот идеальное решение, которое будет работать во всех браузерах с мая 2021 года!

TL;DR

Переименуйте имена полей ввода и идентификаторы полей во что-нибудь несвязанное, например 'data_input_field_1'. Затем добавьте символ &#8204; в середину ваших ярлыков. Это непечатаемый символ, поэтому вы его не увидите, но он обманом заставляет браузер не распознавать поле как поле, требующее автозаполнения, поэтому встроенный виджет автозаполнения не отображается!

Детали

Почти все браузеры используют комбинацию имени поля, идентификатора, заполнителя и метки, чтобы определить, принадлежит ли поле к группе полей адреса, для которых может быть полезно автозаполнение. Поэтому, если у вас есть поле типа <input type="text" id="address" name="street_address">, почти все браузеры будут интерпретировать это поле как поле адреса. Таким образом, браузер будет отображать встроенный виджет автозаполнения. Мечта была бы о том, чтобы использование атрибута autocomplete="off" сработало бы, к сожалению, большинство браузеров в настоящее время не подчиняются запросу.

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

Начните с переименования атрибутов id и name во что-нибудь, что не даст вам понять, что вы имеете дело с данными, связанными с адресом. Поэтому вместо использования <input type="text" id="city-input" name="city"> используйте что-то вроде этого вместо <input type="text" id="input-field-3" name="data_input_field_3">. Браузер не знает, что представляет собой data_input_field_3. Но ты делаешь.

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

Последний параметр - это метка, прикрепленная к полю. Однако, если вы похожи на меня, вы, вероятно, захотите сохранить метку нетронутой и отображать узнаваемые поля для ваших пользователей, такие как адрес, город, штат, страна. Что ж, отличные новости: ВЫ МОЖЕТЕ! Лучший способ добиться этого - вставить несоединяемый символ нулевой ширины &#8204; в качестве второго символа в метке. Итак, заменив <label>City</label> на <label>C&#8204;ity</label>. Это непечатаемый символ, поэтому ваши пользователи будут видеть City, но браузер будет обманут, увидев C ity и не узнает поле!

Миссия выполнена! Если все прошло хорошо, браузер больше не должен отображать встроенный виджет автозаполнения адреса в этих полях!

Надеюсь, это поможет вам в ваших усилиях!

person Rocket Fuel    schedule 19.05.2021

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

<input type="text" name="" value="" autocomplete="off" />
person Prakash Bhandari    schedule 12.05.2016
comment
Чем это отличается от предыдущих 50 ответов (не риторический вопрос)? - person Peter Mortensen; 09.04.2021

Никаких фальшивых вводов, никакого 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

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

Маска пароля

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

person Julius Žaromskis    schedule 13.04.2018

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

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

обсуждение Chrome

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

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

<input type='search' name="whatever" autocomplete='off' />
person Blair Anderson    schedule 10.12.2015

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

То же самое сделал мой банк, и мне было интересно, как они это сделали. Он даже удаляет значение, которое уже было запомнено браузером после удаления тега.

person jcubic    schedule 25.02.2016

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

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

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

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

person Jason L.    schedule 27.04.2016

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

person Mohaimin Moin    schedule 14.03.2017

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

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

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

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

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

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

<input type="string" name="mysite_addr" autocomplete="on">
person joeytwiddle    schedule 22.06.2018

Это то, что мы назвали автозаполнением текстового поля.

Введите здесь описание изображения

Мы можем отключить автозаполнение текстового поля двумя способами:

  1. По ярлыку браузера

  2. По коду

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

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

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

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

Если вы хотите отключить метку кодирования, вы можете сделать следующее:

Использование 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>
person Debendra Dash    schedule 19.03.2016

Ответ <сильный > dsuess, размещенный только для чтения, был очень умен и работал.

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

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

jQuery(document).ready(function () {
    $("input").attr('readonly', true);
    $("input").removeAttr('readonly');
});
person Peter    schedule 16.06.2016

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

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

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

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

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

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

  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">
}
person Community    schedule 28.02.2017

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

ismxfilled="0" для OFF

or

ismxfilled="1" для ON

person WolfyD    schedule 13.08.2015

Я перепробовал почти все ответы, но новая версия Chrome умна; если вы напишете

autocomplete="randomstring" or autocomplete="rutjfkde"

он автоматически преобразует его в

autocomplete="off"

когда элемент управления вводом получает фокус.

Итак, я сделал это с помощью jQuery, и мое решение таково.

$("input[type=text], input[type=number], input[type=email], input[type=password]").focus(function (e) {
    $(this).attr("autocomplete", "new-password");
})

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

person Sikandar Amla    schedule 30.11.2019

Попробуй это :

<input type='text' autocomplete='off' />
person Cool    schedule 27.05.2017

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

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

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

person gem007bd    schedule 11.05.2018

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

<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, должно работать значение атрибута автозаполнения «новый пароль».

<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>
person NOYB    schedule 07.07.2018

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

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

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

person JoerT    schedule 21.11.2018

Большинство ответов не помогли, поскольку браузер их просто игнорировал. (Некоторые из них не были кроссбраузерными). Исправление, которое сработало для меня:

<form autocomplete="off">
    <input type="text" autocomplete="new-password" />
    <input type="password" autocomplete="new-password" />
</form>

Я установил autofill = "off" в теге формы и autofill = "new-password" везде, где автозаполнение не было необходимо.

person Pasham Akhil Kumar Reddy    schedule 12.07.2019
comment
Re Большинство ответов не помогли, поскольку браузер их просто игнорировал: Вы можете быть более конкретными? Какие браузеры, версии и платформы (включая версии). Пожалуйста, ответьте, отредактировав (изменив) свой ответ, а не здесь, в комментариях (без Edit :, Update: или аналогичный - ответ должен выглядеть так, как если бы он был написан сегодня). - person Peter Mortensen; 18.07.2021

По состоянию на декабрь 2019 г .:

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

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

Согласно сообщению Mozilla Dev Network (MDN) о как отключить автозаполнение форм

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

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

Решение

Итак, в конце статьи они поделились решением, которое работает для всех браузеров, включая IE11 + Edge. По сути, это плагин jQuery, который делает свое дело. Вот ссылка на плагин jQuery и как он работает.

Фрагмент кода:

$(document).ready(function () {        
    $('#frmLogin').disableAutoFill({
        passwordField: '.password'
    });
});

Обратите внимание на то, что в HTML поле пароля имеет текстовый тип, и для идентификации этого поля применяется класс password:

<input id="Password" name="Password" type="text" class="form-control password">

Надеюсь, это кому-то поможет.

person Azaz ul Haq    schedule 11.12.2019

Есть много ответов, но большинство из них - это хаки или какие-то обходные пути.

Здесь есть три случая.

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

Если вы все же хотите это сделать, см. Случай III.

Случай II: Когда это не ваша обычная форма входа, но атрибут name или id входных данных не такой, как адрес электронной почты, логин, имя пользователя, имя_пользователя, пароль.

Использовать

<input type="text" name="yoda" autocomplete="off">

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

Например: логин, abc_login, пароль, some_password, password_field.

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

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

В таких случаях autocomplete="off" работать не будет. Используйте autocomplete="new-password"

<input type="text" name="yoda" autocomplete="new-password">

Полезная ссылка:

  1. https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion
person Nerve    schedule 09.07.2020

В Chrome для ввода типа пароля у меня работает только autocomplete="new-password".

person Juangui Jordán    schedule 12.08.2020

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

$(':input', $formElement).attr('autocomplete', 'off');
person Ben Affleck    schedule 01.11.2015

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

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

// Prevent input autocomplete
$.fn.preventAutocomplete = function() {
    this.each(function () {
        var $el = $(this);
        $el
            .clone(false, false) // Make a copy (except events)
            .insertBefore($el)   // Place it before original field
            .prop('id', '')      // Prevent ID duplicates
            .hide()              // Make it invisible for user
        ;
    });
};

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

person Oleg    schedule 02.09.2016
comment
@mickmackusa спасибо за комментарий, я только что добавил больше объяснений - person Oleg; 28.08.2020

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

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

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

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

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

<input type="checkbox" ng-model="createPassword">
<input ng-if="changePassword" type="password">
person Dag Høidahl    schedule 24.10.2016

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

Например:

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

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

autocapitalize="off" autocomplete="off"

or

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

person Community    schedule 03.03.2018

Я столкнулся с той же проблемой, сегодня, 10.09.2019, я нашел только одно решение:

Добавьте autocomplete = "off" в тег формы.

поставить 1 ложный ввод после открытия тега формы.

<input id="username" style="display:none" type="text" name="fakeusernameremembered">

но он не будет работать с полем типа пароля, попробуйте

<input type="text" oninput="turnOnPasswordStyle()" placeholder="Enter Password" name="password" id="password" required>

по сценарию

function turnOnPasswordStyle() {
    $('#password').attr('type', "password");
}

Это проверено на Chrome-78, IE-44, Firefox-69.

person João Victor Scanagatta    schedule 10.09.2019

Ни одно из решений, которые я нашел на сегодняшний день, не дает реального рабочего отклика.

Решения с атрибутом autocomplete не работают.

Итак, вот что я написал для себя:

<input type="text" name="UserName" onkeyup="if (this.value.length > 0) this.setAttribute('type', 'password'); else this.setAttribute('type', 'text');" >

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

И это работает.

ваше здоровье

person Patrick    schedule 08.04.2020
comment
Привет, @Patrick, ты отвечаешь на вопрос, которому больше 11 лет. Пожалуйста, попробуйте ответить на новые вопросы, это более полезно. - person Archer; 08.04.2020
comment
@Archer, ваш комментарий на 100% ошибочен. Возраст вопроса не влияет на то, должен ли он получить новый ответ. Фактически, слишком много людей сосредоточены на ответах на новые вопросы, и в конечном итоге они публикуют избыточные советы по вопросам, которые были решены годами ранее и должны были быть закрыты как дубликаты. ВАЖНО, чтобы каждый новый ответ на странице содержал уникальные и ценные идеи. Ответ, который дает только совет, который уже был заявлен в более раннем ответе, вероятно, будет записан в DV, а затем удален как избыточный контент. - person mickmackusa; 28.08.2020

Мое решение - изменить тип текстовых входов динамически с помощью директивы angular js, и это работает как шарм

сначала добавьте 2 скрытых текстовых поля

и просто добавьте такую ​​директиву angular

 (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"

person Edison    schedule 26.03.2018

Уверен, что это наиболее универсальное решение на сегодняшний день

Это останавливает автозаполнение и всплывающее окно с предложениями.

Введение

Посмотрим правде в глаза, autocomplete = off или new-password, похоже, не работает. Это должно работать, но это не так, и каждую неделю мы обнаруживаем, что что-то еще изменилось, и браузер заполняет форму новым случайным мусором, который нам не нужен. Я обнаружил действительно простое решение, которое не требует автозаполнения на страницах входа.

Как реализовать

Шаг 1). Добавьте один и тот же вызов функции в атрибуты onmousedown и onkeyup для полей имени пользователя и пароля, убедившись, что вы указали им идентификатор И обратите внимание на код в конце вызова функции. md = mousedown и ku = keyup

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

Например:

<input type="text" value="&nbsp;" id="myusername" onmousedown="protectMe(this,'md')" onkeyup="protectMe(this,'ku')" />

Шаг 2). Включите эту функцию на странице

function protectMe(el,action){

 // Remove the white space we injected on startup
 var v = el.value.trim();
 
// Ignore this reset process if we are typing content in
// and only acknowledge a keypress when it's the last Delete
// we do resulting in the form value being empty
 if(action=='ku' && v != ''){return;} 

// Fix double quote issue (in the form input) that results from writing the outerHTML back to itself
  v = v.replace(/"/g,'\\"'); 
  
  // Reset the popup appearing when the form came into focus from a click  by rewriting it back
  el.outerHTML=el.outerHTML; 

  // Issue instruction to refocus it again, insert the value that existed before we reset it and then select the content.
  setTimeout("var d=document.getElementById('"+el.id+"'); d.value=\""+v+"\";d.focus();if(d.value.length>1){d.select();}",100);
}

Что он делает?

  • Во-первых, он добавляет &nbsp; пробел в поле, поэтому браузер пытается найти связанные с этим подробности, но ничего не находит, так что автозаполнение исправлено.
  • Во-вторых, когда вы щелкаете, HTML создается снова, закрывая всплывающее окно, а затем значение добавляется обратно выбранным.
  • Наконец, когда вы удаляете строку с помощью кнопки «Удалить», всплывающее окно обычно появляется снова, но проверка клавиатуры повторяет процесс, если мы попадаем в эту точку.

Какие проблемы?

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

Что может быть лучше?

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

Протестированные браузеры

Протестировано и работает с последними версиями Chrome, Firefox, Edge на момент публикации.

person Adam Whateverson    schedule 23.10.2020

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

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

Затем вы захотите сохранить любые длинные записи в одной строке, например input, и вы захотите, чтобы textarea прокручивалась по оси Y вместе с курсором. Мы также хотим избавиться от поля изменения размера, поскольку мы делаем все возможное, чтобы имитировать поведение input, у которого нет дескриптора изменения размера. Мы достигаем всего этого с помощью небольшого быстрого CSS:

#your-textarea {
  resize: none;
  overflow-y: hidden;
  white-space: nowrap;
}

Наконец, вы захотите убедиться, что надоедливая полоса прокрутки не появляется, чтобы разрушить вечеринку (для этих особенно длинных записей), поэтому убедитесь, что ваша текстовая область не показывает ее:

#your-textarea::-webkit-scrollbar {
  display: none;
}

Очень просто. У нас не было проблем с автозаполнением с этим решением.

person FrontEndDev    schedule 30.10.2020

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

Пример в React:

import React, {Component} from 'react';

class NoAutoFillInput extends Component{

    constructor() {
        super();
        this.state = {
            locked: true
        }
    }

    onChange(event){
        if (!this.state.locked){
            this.props.onChange(event.target.value);
        }
    }

    render() {
        let props = {...this.props, ...{onChange: this.onChange.bind(this)}, ...{onSelect: () => this.setState({locked: false})}};
        return <input {...props}/>;
    }
}

export default NoAutoFillInput;

Если браузер пытается заполнить поле, элемент по-прежнему заблокирован, и его состояние не изменяется. Теперь вы можете просто заменить поле ввода компонентом NoAutoFillInput, чтобы предотвратить автозаполнение:

<div className="form-group row">
    <div className="col-sm-2">
        <NoAutoFillInput type="text" name="myUserName" className="form-control" placeholder="Username" value={this.state.userName} onChange={value => this.setState({userName: value})}/>
    </div>
    <div className="col-sm-2">
        <NoAutoFillInput type="password" name="myPassword" className="form-control" placeholder="Password" value={this.state.password} onChange={value => this.setState({password: value})}/>
    </div>
</div>

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

person Jos    schedule 03.03.2020

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

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

person Lucas    schedule 19.07.2019

Easy Hack

Сделать ввод доступным только для чтения

<input type="text" name="name" readonly="readonly">

Удалить только чтение после тайм-аута

$(function() {
    setTimeout(function() {
        $('input[name="name"]').prop('readonly', false);
    }, 50);
});
person Kishan Vaghela    schedule 18.07.2019

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

<input id='input_password' type='text' autocomplete='off' autofocus>

Есть переменная с именем input, заданная как пустая строка ...

var input = "";

За полевыми событиями следит jQuery ...

  1. В фокусе содержимое поля и соответствующая входная переменная всегда очищаются.
  2. При нажатии клавиши любой буквенно-цифровой символ, а также некоторые определенные символы добавляются к входной переменной, а поле ввода заменяется символом маркера. Кроме того, при нажатии клавиши Enter набранные символы (сохраненные во входной переменной) отправляются на сервер через Ajax. (См. Сведения о сервере ниже.)
  3. При нажатии клавиши Home, End и Arrow вызывают сброс входной переменной и значений полей. (Я мог бы поработать со стрелками и событием фокуса и использовать .selectionStart, чтобы выяснить, где пользователь щелкнул или выполнял навигацию, но это не стоит усилий для поля пароля.) Кроме того, нажатие клавиши Backspace соответственно обрезает и переменную, и содержимое поля.

$("#input_password").off().on("focus", function(event) {
    $(this).val("");
    input = "";

}).on("keypress", function(event) {
    event.preventDefault();

    if (event.key !== "Enter" && event.key.match(/^[0-9a-z!@#\$%&*-_]/)) {
        $(this).val( $(this).val() + "•" );
        input += event.key;
    }
    else if (event.key == "Enter") {
        var params = {};
        params.password = input;

        $.post(SERVER_URL, params, function(data, status, ajax) {
            location.reload();
        });
    }

}).on("keyup", function(event) {
    var navigationKeys = ["Home", "End", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"];
    if ($.inArray(event.key, navigationKeys) > -1) {
        event.preventDefault();
        $(this).val("");
        input = "";
    }
    else if (event.key == "Backspace") {
        var length = $(this).val().length - 1 > 0 ? $(this).val().length : 0;
        input = input.substring(0, length);
    }
});

Сводка внешнего интерфейса

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


Сведения о сервере (необязательно)

Как показано выше, JavaScript выполняет location.reload (), как только сервер возвращает ответ JSON. (Этот метод входа в систему предназначен для доступа к ограниченному инструменту администрирования. Некоторые излишки, связанные с содержимым файлов cookie, могут быть пропущены для более общей реализации.) Вот подробности:

  • Когда пользователь переходит на сайт, сервер ищет допустимый файл cookie.
  • Если файлов cookie нет, отображается страница входа в систему. Когда пользователь вводит пароль, и он отправляется через Ajax, сервер подтверждает пароль, а также проверяет, находится ли IP-адрес пользователя в списке авторизованных IP-адресов.
  • Если пароль или IP-адрес не распознаются, сервер не генерирует cookie, поэтому при перезагрузке страницы пользователь видит ту же страницу входа в систему.
  • Если распознаются и пароль, и IP-адрес, сервер генерирует файл cookie, срок жизни которого составляет десять минут, а также сохраняет два зашифрованных значения, которые соответствуют временному интервалу и IP-адресу.
  • Когда страница перезагружается, сервер находит файл cookie и проверяет правильность скремблированных значений (т. Е. Период времени соответствует дате файла cookie и совпадает ли IP-адрес).
  • Процесс аутентификации и обновления файла cookie повторяется каждый раз, когда пользователь взаимодействует с сервером, независимо от того, входит ли он в систему, отображает данные или обновляет запись.
  • Если значения cookie всегда верны, сервер представляет полный веб-сайт (если пользователь входит в систему) или выполняет любой отправленный запрос на отображение или обновление.
  • Если в какой-то момент значения cookie неверны, сервер удаляет текущий файл cookie, который затем при перезагрузке вызывает повторное отображение страницы входа в систему.
person Alan M.    schedule 19.02.2019

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

person Sam    schedule 12.03.2017

Ни один из представленных ответов не работал во всех протестированных мной браузерах. Основываясь на уже предоставленных ответах, это то, к чему я пришел (тестировал) в 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>
person zinczinc    schedule 22.11.2017

Фиксированный. Просто нужно добавить над реальным полем ввода

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) - это обходной путь для автозаполнения chrome / opera с неправильными полями

 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'
      ... 
    />
person Palaniichuk Dmytro    schedule 19.01.2018

Мне удалось остановить автозаполнение 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" />

At first, I tried adding display:none; to the inputs but Chrome ignored them and autofilled the visible ones.

person user3014373    schedule 08.05.2018

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

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

Я решил поместить этот код после загрузки страницы:

<script>
var randomicAtomic = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
  $('input[type=text]').attr('autocomplete',randomicAtomic);
</script>
person Marcelo Agimóvel    schedule 01.08.2019
comment
В этом ответе отсутствует образовательное объяснение. - person mickmackusa; 28.08.2020

Самый простой ответ

<input autocomplete="on|off">

Но имейте в виду поддержку браузера. В настоящее время атрибут автозаполнения поддерживается

Chrome 17.0 и последняя версия IE 5.0 и последняя
Firefox 4.0 и последняя версия
Safari 5.2 и последняя версия
Opera 9.6 и последняя версия

person azizsagi    schedule 27.09.2019

Мое решение с jQuery. Это может быть не на 100% надежным, но у меня это работает. Идея описана в аннотациях к коду.

    /**
 * Prevent fields autofill for fields.
 * When focusing on a text field with autocomplete (with values: "off", "none", "false") we replace the value with a new and unique one (here it is - "off-forced-[TIMESTAMP]"),
 * the browser does not find this type of autocomplete in the saved values and does not offer options.
 * Then, to prevent the entered text from being saved in the browser for a our new unique autocomplete, we replace it with the one set earlier when the field loses focus or when user press Enter key.
 * @type {{init: *}}
 */
var PreventFieldsAutofill = (function () {
    function init () {
        events.onPageStart();
    }

    var events = {
        onPageStart: function () {
            $(document).on('focus', 'input[autocomplete="off"], input[autocomplete="none"], input[autocomplete="false"]', function () {
                methods.replaceAttrs($(this));
            });
            $(document).on('blur', 'input[data-prev-autocomplete]', function () {
                methods.returnAttrs($(this));
            });
            $(document).on('keydown', 'input[data-prev-autocomplete]', function (event) {
                if (event.keyCode == 13 || event.which == 13) {
                    methods.returnAttrs($(this));
                }
            });
            $(document).on('submit', 'form', function () {
                $(this).find('input[data-prev-autocomplete]').each(function () {
                    methods.returnAttrs($(this));
                });
            });
        }
    };

    var methods = {
        /**
         * Replace value of autocomplete and name attribute for unique and save the original value to new data attributes
         * @param $input
         */
        replaceAttrs: function ($input) {
            var randomString = 'off-forced-' + Date.now();
            $input.attr('data-prev-autocomplete', $input.attr('autocomplete'));
            $input.attr('autocomplete', randomString);
            if ($input.attr('name')) {
                $input.attr('data-prev-name', $input.attr('name'));
                $input.attr('name', randomString);
            }
        },
        /**
         * Restore original autocomplete and name value for prevent saving text in browser for unique value
         * @param $input
         */
        returnAttrs: function ($input) {
            $input.attr('autocomplete', $input.attr('data-prev-autocomplete'));
            $input.removeAttr('data-prev-autocomplete');
            if ($input.attr('data-prev-name')) {
                $input.attr('name', $input.attr('data-prev-name'));
                $input.removeAttr('data-prev-name');
            }
        }
    };

    return {
        init: init
    }
})();
PreventFieldsAutofill.init();
.input {
  display: block;
  width: 90%;
  padding: 6px 12px;
  font-size: 14px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 4px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<form action="#">
  <p>
    <label for="input-1">Firts name without autocomplete</label><br />
    <input id="input-1" class="input" type="text" name="first-name" autocomplete="off" placeholder="Firts name without autocomplete" />
  </p>
  <p>
    <label for="input-2">Firts name with autocomplete</label><br />
    <input id="input-2" class="input" type="text" name="first-name" autocomplete="given-name" placeholder="Firts name with autocomplete" />
  </p>
  <p>
    <button type="submit">Submit form</button>
  </p>
</form>

person xixe    schedule 28.11.2019

Просто попробуйте поставить атрибут autocomplete со значением "off" к типу ввода.

<input type="password" autocomplete="off" name="password" id="password" />
person Nagnath Mungade    schedule 17.01.2020

  1. Оставьте поля ввода с текстовым типом и скрытыми.
  2. В DOMContentLoaded вызовите функцию, которая изменяет типы пароля и отображает поля с задержкой в ​​1 с.

document.addEventListener('DOMContentLoaded', changeInputsType);

function changeInputsType() {
    setTimeout(function() {
        $(/*selector*/).prop("type", "password").show();
    }, 1000);
}

person A.D.P. Tondolo    schedule 24.11.2020
comment
Вы должны сделать лучше, чем то, что вы только что опубликовали, чтобы предотвратить отрицательное голосование или пометку за некачественный ответ. Имейте в виду, что вы соревнуетесь с 82 другими ответами. Добавить управление версиями. Конец обзора. - person ZF007; 24.11.2020

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

Работает это так:

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

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

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

person Alexander Ryan Baggett    schedule 17.11.2016
comment
Это ужасное решение, и никому не рекомендую это делать. - person Jamie Rees; 08.12.2016

[Работает в 2021 году для Chrome (v88, 89, 90), Firefox, Brave, Safari]

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

Проблема, упомянутая в вопросе, связана с функцией автозаполнения Chrome, и вот позиция Chrome по этому поводу в этой ссылке на ошибку - https://bugs.chromium.org/p/chromium/issues/detail?id=468153#c164

Проще говоря, есть два случая -

  • [СЛУЧАЙ 1]: ваш input тип отличается от password. В этом случае решение простое и состоит из трех шагов.

  • Добавить атрибут name в input

  • name не должен начинаться со значения, такого как адрес электронной почты или имя пользователя, в противном случае Chrome все равно будет отображать раскрывающийся список. Например, name="emailToDelete" показывает раскрывающийся список, а name="to-delete-email" - нет. То же самое касается атрибута autocomplete.

  • Добавьте атрибут autocomplete и добавьте значимое для вас значение, например new-field-name

Это будет выглядеть так, и вы больше не увидите автозаполнение для этого ввода до конца своей жизни -

  <input type="text/number/something-other-than-password" name="x-field-1" autocomplete="new-field-1" />
  • [СЛУЧАЙ 2]: input type равно password
  • Что ж, в этом случае, независимо от ваших испытаний, Chrome покажет вам раскрывающийся список для управления паролями / использования уже существующего пароля. Firefox также будет делать что-то подобное, и то же самое будет со всеми другими основными браузерами. [1]
  • В этом случае, если вы действительно хотите, чтобы пользователь не видел раскрывающееся меню для управления паролями / просмотр надежно сгенерированного пароля, вам придется поиграть с JS, чтобы переключить тип ввода, как упоминалось в других ответах на этот вопрос.

[1] Подробный документ MDN об отключении автозаполнения - https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

person thisisashwani    schedule 09.04.2021

Просто меняйте атрибут name в своем input элементе на что-нибудь уникальное каждый раз, и он больше никогда не будет автоматически заполняться!

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

<input type="password" name="password_{DateTime.Now.Ticks}" value="" />
person Stokely    schedule 28.04.2021

Я уже опубликовал решение для этого здесь: Отключить кредитную карту Chrome Autofill

Обходной путь - установить для атрибута автозаполнения значение cc-csc, значение которого является CSC кредита. карта и что они не могут ее хранить! (теперь...)

autocomplete="cc-csc"
person Guido    schedule 28.12.2020

Перепробовав все решения (некоторые работали частично, отключив автозаполнение, но не автозаполнение, некоторые вообще не работали), я нашел лучшее решение на 2020 год - добавить type = search и autocomplete = off в ваш элемент ввода. Нравится:

<input type="search" /> or <input type="search" autocomplete="off" />

Также убедитесь, что в элементе формы стоит autocomplete = off. Это отлично работает и отключает как автозаполнение, так и автозаполнение.

Кроме того, если вы используете type = email или любой другой тип текста, вам нужно добавить autocomplete = new-email, и это полностью отключит оба. то же самое касается type = password. Просто добавьте префикс new- к автозаполнению вместе с типом. Нравится:

<input type="email" autocomplete="new-email" />
<input type="password" autocomplete="new-password" />
person Elazar Zadiki    schedule 15.12.2020

Просто autocomplete="off" list="autocompleteOff" в вашем вводе и работа сделана для IE / Edge! а для chrome добавить autocomplete="new password"

person prabhat.mishra2812    schedule 26.06.2020

Я много лет боролся с автозаполнением. Я пробовал каждое предложение, и ничего не помогло. Добавление атрибутов jQuery 2 сработало хорошо:

$(document).ready( function () {
    setTimeout(function() {
        $('input').attr('autocomplete', 'off').attr('autocorrect', 'off');
    }, 10);
}); 

приведет к HTML

<input id="start_date" name="start_date" type="text" value="" class="input-small hasDatepicker" autocomplete="off" placeholder="Start date" autocorrect="off">
person Adrian P.    schedule 14.07.2020

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

Атрибуты поля ввода id и name не должны быть распознаваемыми. Поэтому никаких значений, таких как имя, телефон, адрес и т. Д.

Смежная метка или div также не должна быть узнаваемой. Однако вы можете задаться вопросом, как пользователь узнает? Есть небольшой забавный трюк, который можно проделать с ::after, используя content. Вы можете установить его на букву.

<label>Ph<span class='o'></span>ne</label>
<input id='phnbr' name='phnbr' type='text'>

<style>
  span.o {
    content: 'o';
  }
</style>
person jemiloii    schedule 13.05.2021

Это работает с Chrome 84.0.4147.105

1. Назначьте текстовый тип полям пароля и добавьте класс, например fakepasswordtype

<input type="text" class="fakepasswordtype" name="password1">
<input type="text" class="fakepasswordtype" name="password2">

2. Затем используйте jQuery, чтобы снова изменить тип на пароль в тот момент, когда будет сделан первый ввод.

jQuery(document).ready(function($) {
    $('.fakepasswordtype').on('input', function(e){
        $(this).prop('type', 'password');
    });
});

Это остановило Chrome от его неприятного уродливого поведения при автозаполнении.

person Juergen    schedule 04.08.2020

Вы можете добавить имя в атрибут name как email адрес в вашу форму и сгенерировать значение электронной почты. Например:

<form id="something-form">
  <input style="display: none" name="email" value="randomgeneratevalue"></input>
  <input type="password">
</form>

Если вы используете этот метод, Google Chrome не сможет вставить пароль для автозаполнения.

person ladone    schedule 19.04.2019
comment
Что вы имеете в виду под адресом электронной почты для (кажется непонятным)? Пожалуйста, ответьте, отредактировав (изменив) свой ответ, а не здесь, в комментариях (без Edit :, Update: или аналогичный - ответ должен выглядеть так, как если бы он был написан сегодня). - person Peter Mortensen; 18.07.2021

Чтобы избежать автозаполнения, добавьте autocomplete="off" в свойство HTML input.

Пример:

<input type="text" name="foo" autocomplete="off" />
person shiva samalla    schedule 06.11.2019
comment
Недвижимость? Вы имеете в виду element? - person Peter Mortensen; 18.07.2021

person    schedule
comment
Чем это отличается от установки autocomplete = off в html, которая в наши дни не работает? - person Andrew; 08.11.2018
comment
Объяснение было бы в порядке. Например, в чем идея / суть? На чем он тестировался (включая информацию о версии) и при каких условиях? - person Peter Mortensen; 09.04.2021