it-swarm.com.ru

Chrome игнорирует автозаполнение = "выкл"

Я создал веб-приложение, которое использует раскрывающийся список тегов. Это прекрасно работает во всех браузерах, кроме браузера Chrome (версия 21.0.1180.89).

Несмотря на то, что оба поля input И поле form имеют атрибут autocomplete="off", Chrome настаивает на том, чтобы в раскрывающемся списке предыдущих записей для этого поля был стерт список тегов.

311
Mr Fett

ОБНОВЛЕНИЕ

Теперь кажется, что Chrome игнорирует атрибуты style="display: none;" или style="visibility: hidden;.

Вы можете изменить это на что-то вроде:

<input style="opacity: 0;position: absolute;">
<input type="password" style="opacity: 0;position: absolute;">

По моему опыту, Chrome автоматически заполняет только первый <input type="password"> и предыдущий <input>. Итак, я добавил:

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

К началу <form> и дело было решено.

291
Diogo Cid

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

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


Другие "solutions" для отключения автозаполнения поля (это не правильный способ, но это работает):

1.

HTML:

<input type="password" id="some_id" autocomplete="new-password">

JS (onload):

(function() {
    var some_id = document.getElementById('some_id');
    some_id.type = 'text';
    some_id.removeAttribute('autocomplete');
})();

или используя jQuery:

$(document).ready(function() {
    var some_id = $('#some_id');
    some_id.prop('type', 'text');
    some_id.removeAttr('autocomplete');
});

2.

HTML:

<form id="form"></form>

JS (onload):

(function() {
    var input = document.createElement('INPUT');
    input.type = 'text';
    document.getElementById('form').appendChild(input);
})();

или используя jQuery:

$(document).ready(function() {
    $('<input>', {
        type: 'text'
    }).appendTo($('#form'));
});

Чтобы добавить более одного поля с помощью jQuery:

function addField(label) {
  var div = $('<div>');
  var input = $('<input>', {
    type: 'text'
  });
  
  if(label) {
    var label = $('<label>', {
      text: label
    });
    
    label.append(input);
    div.append(label);    
  } else {
    div.append(input);    
  }  
  
  div.appendTo($('#form'));
}

$(document).ready(function() {
  addField();
  addField('Field 1: ');  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="form"></form>


Работает в:

  • Хром: 49+

  • Firefox: 44+

197
Cava

Похоже, что Chrome теперь игнорирует autocomplete="off", если только он не находится в теге <form autocomplete="off">

125
ice cream

Для надежного обходного пути вы можете добавить этот код на страницу макета:

<div style="display: none;">
 <input type="text" id="PreventChromeAutocomplete" 
  name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>

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

Это не будет работать с полями пароля - они обрабатываются в Chrome совсем по-другому. См. https://code.google.com/p/chromium/issues/detail?id=468153 для получения более подробной информации.

ОБНОВЛЕНИЕ: Ошибка закрыта как «Не будет исправлена» командой Chromium 11 марта 2016 года. См. Последний комментарий в моем первоначально поданном отчете об ошибке , для полного объяснения. TL; DR: использовать семантические атрибуты автозаполнения, такие как autocomplete = "new-street-address", чтобы Chrome не выполнял автозаполнение.

64
J.T. Taylor

Современный подход

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

<input type="text" onfocus="this.removeAttribute('readonly');" readonly />

Следующая часть не обязательна. Стиль вашего ввода соответственно, чтобы он не выглядел как readonly.

input[readonly] {
     cursor: text;
     background-color: #fff;
}

РАБОЧИЙ ПРИМЕР

43
Fizzix

Chrome версии 34 теперь игнорирует autocomplete=off, смотрите это .

Много дискуссий о том, хорошо это или плохо? Каковы ваши взгляды?

32
Peter Kerr

Решение в настоящее время заключается в использовании type="search". Google не применяет автозаполнение для входов с типом поиска.

Смотрите: https://Twitter.com/Paul_Kinlan/status/596613148985171968

Обновление 04/04/2016: Похоже, это исправлено! Смотрите http://codereview.chromium.org/1473733008

29
Nathan Pitman

Что ж, немного опоздал на вечеринку, но, похоже, есть недопонимание того, как autocomplete должен и не должен работать. Согласно спецификациям HTML, пользовательский агент (в данном случае Chrome) может переопределить autocomplete:

https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute

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

Так что в случае с Chrome разработчики, по сути, сказали: «Мы оставим это на усмотрение пользователя, чтобы решить в своих предпочтениях, хотят ли они, чтобы autocomplete работал или нет. Если вы этого не хотите, не включайте его в своем браузере. ».

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

Ключевое слово «off» указывает либо на то, что входные данные элемента управления особенно чувствительны (например, код активации для ядерного оружия); или что это значение никогда не будет использоваться повторно (например, одноразовый ключ для входа в банк), и поэтому пользователю придется каждый раз явно вводить данные, вместо того, чтобы полагаться на UA для предварительного заполнения ценность для него; или что документ предоставляет собственный механизм автозаполнения и не хочет, чтобы пользовательский агент предоставлял значения автозаполнения.

Поэтому, испытав такое же разочарование, как и все остальные, я нашел решение, которое работает для меня. Это похоже на autocomplete="false" ответы. 

Статья в Mozilla говорит именно об этой проблеме:

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

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

Так что следующий код должен работает:

autocomplete="nope"

И так должен каждый из следующих:

autocomplete="false"
autocomplete="foo"
autocomplete="bar"

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

Стоит отметить, что многие браузеры игнорируют настройки autocomplete для полей входа в систему (имя пользователя и пароль). Как говорится в статье Mozilla:

По этой причине многие современные браузеры не поддерживают autocomplete = "off" для полей входа в систему.

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

Это поведение в Firefox (начиная с версии 38), Google Chrome (начиная с 34) и Internet Explorer (начиная с версии 11).

Наконец, небольшая информация о том, принадлежит ли атрибут элементу form или элементу input. Спецификация снова имеет ответ:

Если атрибут autocomplete опущен, вместо него используется значение по умолчанию, соответствующее состоянию атрибута autocomplete владельца формы элемента («on» или «off»). Если владельца формы нет, то используется значение «on».

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

Резюме

Чтобы отключить autocomplete на всей форме:

<form autocomplete="off" ...>

Или, если вам нужно сделать это динамически:

<form autocomplete="random-string" ...>

Отключить autocomplete для отдельного элемента (независимо от того, присутствует или нет параметр формы)

<input autocomplete="off" ...>

Или, если вам нужно сделать это динамически:

<input autocomplete="random-string" ...>

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

29
Hooligancat

Браузер не заботится об autocomplete = off auto или даже вводит учетные данные в неправильное текстовое поле?

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

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

 <input type="password" readonly  
     onfocus="$(this).removeAttr('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, когда в та же форма.Есть поля пароля. Я думаю, браузер ищет поле пароля для вставки сохраненных учетных данных. Затем он autofills username в ближайшее поле textlike-input, которое появляется перед полем пароля в DOM (просто догадка из-за наблюдения). Поскольку браузер является последним экземпляром, и вы не можете им управлять, иногда даже autocomplete = off не помешает заполнить учетные данные в неправильные поля, но не в поле пользователя или псевдонима. 

22
dsuess

Вы можете использовать autocomplete="new-password"

<input type="email" name="email">
<input type="password" name="password" autocomplete="new-password">

Работает в:

  • Хром: 53, 54, 55
  • Firefox: 48, 49, 50
18
Steffi

всем, кто ищет решение этой проблемы, я наконец-то это выясню. 

Chrome подчиняется только autocomplete = "off", если страница является страницей HTML5 (я использовал XHTML).

Я преобразовал свою страницу в HTML5, и проблема исчезла (facepalm).

8
Mr Fett

Видно, что Chrome игнорирует autocomplete="off", я решаю это глупым способом, который использует «фальшивый ввод», чтобы обмануть Chrome, чтобы заполнить его вместо заполнения «реального».

Пример:

<input type="text" name="username" style="display:none" value="fake input" /> 
<input type="text" name="username" value="real input"/>

Chrome заполнит «ложный ввод», а при отправке сервер примет значение «реального ввода».

8
Chang

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

Поместите этот код в начало вашей формы

<div style="display: none;">
    <input type="text" autocomplete="new-password">
    <input type="password" autocomplete="new-password">
</div>

Затем в поле вашего реального пароля используйте

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

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

Утверждено:

  • Хром: 49
  • Firefox: 44, 45
  • Край: 25
  • Internet Explorer: 11
7
Loenix

Вплоть до прошлой недели два приведенных ниже решения работали для Chrome, IE и Firefox. Но с выпуском версии Chrome 48 (и все еще в 49) они больше не работают:

  1. Следующее в верхней части формы: 
<input style="display:none" type="text" name="fakeUsername"/>
<input style="display:none" type="password" name="fakePassword"/>
  1. Следующее в элементе ввода пароля:

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

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

setTimeout(function(){$('#PasswordData').prop('disabled', false);}, 50);

Но это выглядело настолько сумасшедшим, и я провел еще несколько поисков и нашел ответ @tibalts в Отключение автозаполнения Chrome . Его ответ - использовать autocomplete = "new-password" при вводе паролей, и это, похоже, работает во всех браузерах (я сохранил свое исправление № 1 выше на этом этапе).

Вот ссылка в обсуждении для разработчиков Google Chrome: https://code.google.com/p/chromium/issues/detail?id=370363#c7

6
prajna

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

от: https://stackoverflow.com/a/29582380/75799

5
Basit

autocomplete=off в основном игнорируется в современных браузерах - в основном из-за менеджеров паролей и т. д.

Вы можете попробовать добавить этот autocomplete="new-password", он не полностью поддерживается всеми браузерами, но работает на некоторых

5
Mahdi Afzal

Начиная с Chrome 42, ни одно из решений/хаков в этой теме (по состоянию на 2015-05-21T12:50:23+00:00) не работает для отключения автозаполнения для отдельного поля или всей формы. 

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

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

Хорошая новость заключается в том, что поскольку «подпись формы» искажается этим, ни одно из полей не заполняется автоматически, поэтому не требуется JS для очистки поддельных полей перед отправкой.

Старый ответ:

Единственное, что я нахожу все еще жизнеспособным, это вставить два пустых поля типа email и пароль перед реальными полями. Вы можете установить для них display: none, чтобы скрыть их (это недостаточно умно, чтобы игнорировать эти поля):

<form action="/login" method="post">
    <input type="email" name="fake_email" style="display:none" aria-hidden="true">
    <input type="password" name="fake_password" style="display:none" aria-hidden="true">
    <input type="email" name="email">
    <input type="password" name="password">
    <input type="submit">
</form>

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

form.addEventListener('submit', function() {
    form.elements['fake_email'].value = '';
    form.elements['fake_password'].value = '';
});

Обратите внимание, что очистка значения с помощью Javascript позволяет переопределить автозаполнение. Таким образом, если допустимо потерять правильное поведение с отключенным JS, вы можете упростить все это с помощью автозаполнения JS «polyfill» для Chrome:

(function(document) {

    function polyfillAutocomplete(nodes) {

        for(var i = 0, length = nodes.length; i < length; i++) {

            if(nodes[i].getAttribute('autocomplete') === 'off') {

                nodes[i].value = '';
            }
        }
    }

    setTimeout(function() {

        polyfillAutocomplete(document.getElementsByTagName('input'));
        polyfillAutocomplete(document.getElementsByTagName('textarea'));

    }, 1);

})(window.document);
4
Bailey Parker

Autocomplete="Off" больше не работает. 

Попробуйте использовать только случайную строку вместо "Off", например Autocomplete="NoAutocomplete"

Я надеюсь, что это помогает.

3
marco burrometo

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

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

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

3
step

После Chrome v. 34 установка autocomplete="off" в теге <form> не работает

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

  1. Удалите name и id ввода пароля
  2. Поместите класс во входные данные (например: passwordInput)

(Пока что Chrome не помещает сохраненный пароль на вход, но форма теперь повреждена)

Наконец, чтобы заставить форму работать, включите этот код, когда пользователь нажимает кнопку отправки или когда вы хотите инициировать отправку формы:

var sI = $(".passwordInput")[0];
$(sI).attr("id", "password");
$(sI).attr("name", "password");

В моем случае я использовал id="password" name="password" при вводе пароля, поэтому я положил их обратно, прежде чем запускать субмиссию.

3
Renato Lochetti

Я только что обновился до Chrome 49 и решение Diogo Cid больше не работает.

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

Теперь Chrome игнорирует исходный обходной путь, применяя учетные данные к первому полю displaytype="password" и его предыдущему полю type="text", поэтому я скрыл оба поля, используя CSSvisibility: hidden;

<!-- HTML -->
<form>
    <!-- Fake fields -->
    <input class="chromeHack-autocomplete">
    <input type="password" class="chromeHack-autocomplete">

    <input type="text" placeholder="e-mail" autocomplete="off" />
    <input type="password" placeholder="Password" autocomplete="off" />
</form>

<!-- CSS -->
.chromeHack-autocomplete {
    height: 0px !important;
    width: 0px !important;
    opacity: 0 !important;
    padding: 0 !important; margin: 0 !important;
}

<!--JavaScript (jQuery) -->
jQuery(window).load(function() {
    $(".chromeHack-autocomplete").delay(100).hide(0, function() {
        $(this).remove();
    });
});

Я знаю, что это может показаться не очень элегантным, но это работает.

3
Cliff Burton

В Chrome 48+ используйте это решение:

  1. Поместите поддельные поля перед реальными полями:

    <form autocomplete="off">
      <input name="fake_email"    class="visually-hidden" type="text">
      <input name="fake_password" class="visually-hidden" type="password">
    
      <input autocomplete="off" name="email"    type="text">
      <input autocomplete="off" name="password" type="password">
    </form>
    
  2. Скрыть поддельные поля:

    .visually-hidden {
      margin: -1px;
      padding: 0;
      width: 1px;
      height: 1px;
      overflow: hidden;
      clip: rect(0 0 0 0);
      clip: rect(0, 0, 0, 0);
      position: absolute;
    }
    
  3. Ты сделал это!

Также это будет работать для более старых версий.

3
yivo

После того, как вы попробовали все решения, вот то, что, кажется, работает для версии Chrome: 45, с формой, имеющей поле пароля:

 jQuery('document').ready(function(){
        //For disabling Chrome Autocomplete
        jQuery( ":text" ).attr('autocomplete','pre'+Math.random(0,100000000));
 });
3
anshuman

autocomplete="off" работает, поэтому вы можете просто сделать следующее:

<input id="firstName2" name="firstName2" autocomplete="off">

Протестировано в текущем Chrome 70, а также во всех версиях, начиная с Chrome 62.

Демо .

UPDATE: поскольку люди склонны понижать это (см., например, комментарий от @AntonKuznetsov down ниже) перед чтением демонстрации в JSFiddle или на самом деле изучением HTML-кода JSFiddle, я должен выразить это ясно:

  • вершина input имеет автоматическое завершение работы
  • внизуinput имеет автоматическое заполнение отключено путем добавления autocomplete="off"
3
Alexander Abakumov

Измените атрибут типа ввода на type="search"

Google не применяет автозаполнение для входов с типом поиска.

3
Matas Vaitkevicius

я нашел это решение наиболее подходящим: 

function clearChromeAutocomplete()
{
// not possible, let's try: 
if (navigator.userAgent.toLowerCase().indexOf('chrome') >= 0) 
{
document.getElementById('adminForm').setAttribute('autocomplete', 'off'); 
setTimeout(function () {
        document.getElementById('adminForm').setAttribute('autocomplete', 'on'); 
}, 1500);
}
}

Он должен быть загружен после того, как dom ready или после рендеринга формы. 

2
user2241415

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

Chrome полностью игнорирует autocomplete = "off". Хотя JS-хаки могут хорошо работать, я нашел простой способ, который работает во время написания:

Установите значение поля пароля для управляющего символа 8 ("\x08" в PHP или &#8; в HTML). Это останавливает автоматическое заполнение поля Chrome, поскольку оно имеет значение, но фактическое значение не вводится, поскольку это символ возврата.

Да, это все еще взлом, но это работает для меня. YMMV.

2
spikyjt

Я решил по-другому. Вы можете попробовать это.

<input id="passfld" type="text" autocomplete="off" />
<script type="text/javascript">
// Using jQuery
$(function(){                                               
    setTimeout(function(){
        $("input#passfld").attr("type","password");
    },10);
});


// or in pure javascript
 window.onload=function(){                                              
    setTimeout(function(){  
        document.getElementById('passfld').type = 'password';
    },10);
  }   
</script>
2
SarwarCSE

У меня была похожая проблема, когда в поле ввода указывалось имя или адрес электронной почты. Я установил autocomplete = "off", но Chrome все еще выдвигал предложения. Оказывается, это произошло потому, что в тексте-заполнителе были слова «имя» и «электронная почта».

Например

<input type="text" placeholder="name or email" autocomplete="off" />

Я обошел это, поместив пространство нулевой ширины в слова в заполнителе. Нет больше автозаполнения Chrome.

<input type="text" placeholder="nam&#8203;e or emai&#8203;l" autocomplete="off" />
1
WDuffy

autocomplete="off" обычно работает, но не всегда. Это зависит от name поля ввода. Имена, такие как «адрес», «электронная почта», «имя» - будут автоматически заполняться (браузеры думают, что они помогают пользователям), когда такие поля, как «код», «пин-код» - не будут заполняться автоматически (если установлен autocomplete="off")

Мои проблемы были - автозаполнение было возиться с Google адрес помощника

Я исправил это, переименовав это 

от 

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

в

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

Проверено в хроме 71.

1
Yevgeniy Afanasyev

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

<?php $autocomplete = 'off_'.time(); ?>
<script>
   $('#email').autocomplete({
      create: function( event, ui ) {
         $(this).attr('autocomplete','<? echo $autocomplete; ?>');
      },
      source: function (request, response) { //your code here },
      focus: function( event, ui ) { //your code here },
      select: function( event, ui ) { //your code here },
   });
</script>
<input type="email" id="email" name="email_<? echo $autocomplete; ?>" autocomplete="<? echo $autocomplete; ?>" />
1
SurferJoe

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

В моем случае у меня было поле с текстом заполнителя 'City or Zip', которое я использовал с автозаполнением Google Place. Оказалось, что он пытался выполнить автозаполнение, как если бы он был частью формы адреса. Трюк не работал, пока я не поместил тот же заполнитель на скрытый элемент, что и на реальный ввод:

<input style="display:none;" type="text" placeholder="City or Zip" />
<input autocomplete="off" type="text" placeholder="City or Zip" />
1
Sam

Похоже, это исправлено! Смотрите https://codereview.chromium.org/1473733008

1
Nathan Pitman

Я использую Chrome - Версия 64.0.3282.140 (Официальная сборка) (64-разрядная версия) и использовал следующий код вместе с именем формы, и он работает для меня.

<form name="formNameHere">....</form>
<script type="text/javascript">
    setTimeout(function(){
        document.formNameHere.reset();
    },500);
</script>
0
Nishant

Ни одно из решений не сработало, за исключением того, что оно дало ложное поле для автозаполнения. Я сделал компонент React для решения этой проблемы.

import React from 'react'

// Google Chrome stubbornly refuses to respect the autocomplete="off" HTML attribute so
// we have to give it a "fake" field for it to autocomplete that never gets "used".

const DontBeEvil = () => (
  <div style={{ display: 'none' }}>
    <input type="text" name="username" />
    <input type="password" name="password" />
  </div>
)

export default DontBeEvil
0
Brennan Cheung

Понятия не имею, почему это работает в моем случае, но в chrome я использовал autocomplete = "none", и Chrome перестал предлагать адреса для моего текстового поля.

0
Chris Sprague

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

input{
  text-security:disc !important;
  -webkit-text-security:disc !important;
  -moz-text-security:disc !important;
}
0
gem007bd

Добавьте это сразу после тега формы:

<form>
<div class="div-form">
<input type="text">
<input type="password" >
</div>

Добавьте это к вашему CSS-файлу:

.div-form{
opacity: 0;
}
0
ITinARRAY

Необходимо использовать AutoComplete = 'false', который также будет работать в браузере Chrome. Используемый код 

<ng-form autocomplete="false"> 
.....
</ng-form>
0
SantoshK

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

<input type="text" name="name" value="  ">
0
JVitela

Вот что у меня сработало в Chrome версии 51.0.2704.106 .<input id="user_name" type="text" name="user_name" autocomplete="off" required /> и в сочетании с <input id="user_password" type="password" name="user_password" autocomplete="new-password" required />. Моя проблема заключалась в том, что после реализации new-password все равно будет отображаться выпадающий список имен пользователей в поле user_name.

0
hyperj123

Я только что попробовал следующее, и это похоже на хитрость в Chrome 53 - он также отключает выпадающий список «Использовать пароль для:» при вводе поля пароля.

Просто установите тип ввода пароля на text, а затем добавьте обработчик onfocus (встроенный или через jQuery/Vanilla JS), чтобы установить тип на password:

onfocus="this.setAttribute('type','password')"

Или даже лучше:

onfocus="if(this.getAttribute('type')==='text') this.setAttribute('type','password')"
0
Mike Rockétt

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

<input autocomplete="off" data-autocomplete-ninja="true" name="fa" id="fa" />

Примечание. Атрибуты входного имени и идентификатора не должны содержать ничего, что могло бы дать подсказку браузеру относительно данных, иначе это решение не будет работать. Например, я использую "fa" вместо "FullAddress".

И следующий скрипт при загрузке страницы (этот скрипт использует JQuery):

$("[data-autocomplete-ninja]").each(function () {
    $(this).focus(function () {
        $(this).data("ninja-name", $(this).attr("name")).attr("name", "");
    }).blur(function () {
        $(this).attr("name", $(this).data("ninja-name"));
    });
});

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

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

0
jonh

TL; DR: Скажите Chrome, что это новый ввод пароля, и он не будет предоставлять старые в качестве предложений автозаполнения:

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

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

Спецификация для autocompleteизменилась , и теперь поддерживает различные значения, облегчающие автоматическое заполнение форм входа в систему:

<!-- Auto fills with the username for the site, even though it's email format -->
<input type="email" name="email" autocomplete="username">

<!-- current-password will populate for the matched username input  -->
<input type="password" autocomplete="current-password" />

Если вы не предоставляете эти данные, Chrome все еще пытается угадать, а когда это происходит, он игнорирует autocomplete="off".

Решение состоит в том, что значения autocomplete также существуют для форм сброса пароля:

<label>Enter your old password:
    <input type="password" autocomplete="current-password" name="pass-old" />
</label>
<label>Enter your new password:
    <input type="password" autocomplete="new-password" name="pass-new" />
</label>
<label>Please repeat it to be sure:
    <input type="password" autocomplete="new-password" name="pass-repeat" />
</label>

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

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

0
Keith