Подтвердить что ты не робот

Отключить автозаполнение в Chrome 63

Я только что обновил свой браузер до Chrome версии 63.0.3239.84 (официальная сборка) (64-разрядная версия).

Затем я отправился на свой сайт, где у меня есть поле ввода с autocomplete='off', но я все равно получаю следующее:

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

(Вы можете увидеть мое раскрывающееся окно подсказки)

Это никогда не было так. Ничего другого не изменилось!

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

Я тестировал это на нескольких машинах с новейшей версией хром в разных операционных системах. Проблема сохраняется.

4b9b3361

Ответ 1

Обновление февраля 2018 года:

Спасибо @JamesNisbet за указание на это в комментариях.

По словам команды Chrome, autocomplete = "off" и autocomplete = "false" будут игнорироваться при движении вперед. Это не временная регрессия в Chrome.

Chrome попытается автоматически заполнить любые поля формы, которые соответствуют стандарту WHATWG, при автозаполнении. За одним исключением они игнорируют значения "off" и "false".

Таким образом, чтобы отключить автозаполнение, используйте атрибут autocomplete со значением, которого нет в списке WHATWG.

Укажите, почему вы считаете, что autocomplete = "off" не должно игнорироваться Chrome в этой теме Chromium.


Похоже на возможную регрессию в Chrome 63. В Chrome оригинальная документация по автозаполнению:

В прошлом многие разработчики добавляли autocomplete = "off" в свои поля формы, чтобы браузер не выполнял какие-либо функции автозаполнения. Хотя Chrome по-прежнему будет учитывать этот тег для данных автозаполнения, он не будет учитывать его для данных автозаполнения. Итак, когда вы должны использовать autocomplete = "off"? Один из примеров - когда вы реализовали собственную версию автозаполнения для поиска.

https://developers.google.com/web/updates/2015/06/checkout-faster-with-autofill

Они делают различие между автозаполнением и автозаполнением, хотя не ясно, чем они отличаются.

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

На данный момент autocomplete="something-new" - хороший обходной путь, хотя синтаксически это не имеет смысла. Кажется, это работает, потому что браузер не может этого понять.

Ответ 2

Мы пробовали autocomplete="false" и autocomplete="off", ни одна из них не работает. Но что-то, чего не понимает Chrome, например, autocomplete="disabled", действительно работает. Странно!

Обновление: это работает с Chrome 72.

Ответ 3

2019 Похоже,autocomplete="disabled" снова работает с Chrome 72.


ПОСКОЛЬКУ МНОГО ЛЮДЕЙ СКАЧИЛИ БЕЗ ЧТЕНИЯ КОММЕНТАРИЙ: ЭТО НЕ ДОЛГО ДЕЙСТВУЕТ В ХРОМЕ НА 2018 ГОДА/ХРОМ 63+ релевантно: https://bugs.chromium.org/p/chromium/issues/detail?id=587466

Если autocomplete = "false" вместо autocomplete = "off" работает, вы можете узнать больше из команды Chrome, почему они это сделали


Вот:

https://www.chromium.org/developers/design-documents/form-styles-that-chromium-understands https://bugs.chromium.org/p/chromium/issues/detail?id=468153 https://groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/zhhj7hCip5c https://developers.google.com/web/updates/2015/06/checkout-faster-with-autofill

Ответ 4

Мне удалось получить рабочий "хак" в Chrome версии 65.0.3325.162 (Официальная сборка) (64-разрядная версия).

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

<input style="display:none;"/>

Затем я отображаю поле ввода моего пароля:

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

Итак, моя форма выглядит так:

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

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

Ответ 5

После Chrome 63 похоже, что они изменили его на autocomplete = "disabled"

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

Ответ 6

Похоже, что chrome ищет ближайший html-тег "label" для ввода и анализирует значение /html-метки, чтобы повлиять на автозаполнение ввода.

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

<label for="">Country</label>
<label for="" style="display: none;">hidden label to mislead chrome autocomplete</label>
<input ... />

Ответ 7

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

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

Ответ 8

Для пользователей Angular, так как autocomplete = 'off' игнорируется новыми версиями chrome, разработчик chrome предлагает autocomplete= 'false | random-string' autocomplete= 'false | random-string', поэтому в браузерах Google Chrome/Modern есть 2 типа пользователей-помощников -

  1. autocomplete = 'off' (что предотвращает последние кэшированные предложения).
  2. autocomplete = 'false | random-string '(что предотвращает установку автозаполнения, так как' random-string 'не известна браузеру).

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

добавьте autocomplete = 'off' в каждом поле ввода. (или простой Jquery).

$("input").attr('autocomplete', 'off');

Удалите <form name='form-name'> из HTML-кода и добавьте ng-form = 'form-name' в свой контейнер <div>. добавление ng-form="form-name" также сохранит все ваши проверки.

Ответ 9

Текущее рабочее решение с использованием JQuery:

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

HTML

<form id="myform">
    <input class="identifyingclass" value="">
    <input class="hidden" id="city" name="city" value="">
    <button type="submit">Submit</button>
</form>

Javascript

$('#myform').on('submit', function(e) {
     $("#city").val($('.identifyingclass').val());
});

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

Ответ 10

Попробуйте удалить "Id" из ввода.

Вот как я это исправил.

Ответ 11

Я исправил это на своем сайте, заменив неправильный элемент ввода на

<p class="input" contenteditable="true">&nbsp;</p>

и использование jQuery для заполнения скрытого поля перед отправкой.

Но это действительно ужасный взлом, вызванный плохим решением в Chromium.

Ответ 12

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

<div style="width: 0; overflow:hidden;">
    <input type="text" />
</div>

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

Примечание. Создание поля ввода скрытого типа или установка для него значения "none" не работает.

Ответ 13

autocomplete="off" работает в текущем Chrome 68, а также в Chrome 63.

Демо

Ответ 14

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

Если это хром, используйте autocomplete = "disabled", который обрабатывает автозаполнение и автозаполнение на основе адреса (две разные вещи):

element.autocomplete = isGoogleChrome() ? 'disabled' :  'off';

Вы можете получить представление о том, как написать isGoogleChrome() здесь

JavaScript: Как узнать, является ли браузер пользователя Chrome?

Ответ 15

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

Я думал о том, как ввод в текстовом вводе очищает автозаполнение Android и сработал следующий трюк. Обратите внимание, что простая очистка значения не удаляла автозаполнение, мне пришлось установить значение поля. Немедленная очистка значения после установки значения также не работала. Задержка необходима для Android Chrome, чтобы увидеть изменения и удалить введенное значение.

Бонус: выполнение этого действия в поле notes привело к тому, что Android очистил другие автозаполненные элементы в моей форме.

<script src="/js/jquery-1.12.1.min.js"></script>
<script>
    $(function () {
        $('#notes').val('--');
        setTimeout(
            function(){ $('#notes').val(''); }
            , 2000
        );
    });
</script>
<input type='text' id='notes' name='notes' maxlength='250' size='17'>

Функция setTimeout( callback, msec ) является javascript, поэтому программист может реализовать это без использования jQuery.