Программное отключение автозаполнения Chrome

Это обсуждается в Интернете (особенно здесь, о переполнении стека), но довольно много из них датируется примерно 2015 годом, поэтому мне было интересно, был ли у кого-нибудь недавний опыт.

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

Раньше autocomplete=“off” работал, но теперь Chrome, похоже, игнорирует это значение и все равно отображает пользовательский интерфейс. Единственное, что я могу найти, что работает с Chrome 66/67 в OSX, - это недопустимое значение, например autocomplete=“blah”. Это кажется слишком схематичным, и мы уже экспериментировали с этим раньше, и это игнорируется в определенных ситуациях / версиях Chrome.

Кто-нибудь любил надежный способ отключить это с помощью HTML / Javascript?

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

stackoverflow.com/questions/50405068/…
Firefly 30.05.2018 14:38

Никогда не было с этим проблем, но если все остальное не помогло, вы можете использовать div[contenteditable] ;-)

René 30.05.2018 14:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
21
3
32 985
16
Перейти к ответу Данный вопрос помечен как решенный

Ответы 16

Вы можете просто ввести autocomplete = "new-password" в поле пароля и все. Это должно работать нормально!

Работает намного лучше, чем приведенный выше код jquery, и намного меньше кода

David Cyr 10.10.2018 15:08

@DavidCyr Вы можете использовать 1 строку jQuery для того же эффекта. $('input').attr("autocomplete", "new-password");

User 20.10.2018 22:55

Примечание: это пока не работает в FF (см. Также MDN). @User Он ничего не имел против самого jQuery, но против плагина disableAutofill.

Kalaschni 18.01.2019 09:09

не работает в Chrome 2019. Он отключает автозаполнение нескольких полей в Chrome и включает автозаполнение одного поля.

Brian McGinity 26.08.2019 22:51

Ноябрь 2019 г. Chome 78.0.3904.97 (официальная сборка) (64-разрядная версия). У меня отлично работает.

PaulM 20.11.2019 20:41
Ответ принят как подходящий

jquery.disable-autofill

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

Usage:

<form>
  <input type = "input" name = "username" autofill = "off" autocomplete = "off">
  <input type = "password" name = "password"  autofill = "off" autocomplete = "off">
</form>

<script src = "jquery.disable-autofill.js"></script>
<script>
  $('input[autofill = "off"]').disableAutofill();
</script>

https://github.com/biesbjerg/jquery.disable-autofill

В вашем ответе $('input[autofill = "off"]).disableAutofill(); отсутствует одна цитата.

User 20.10.2018 22:46

autocomplete = "off"не работает больше нет. Единственное, что работает с 2019 г., - это autocomplete = "new-password".

Проверьте эту ссылку в Chromium Project https://www.chromium.org/developers/design-documents/form-styles-that-chromium-understands

Add an autocomplete attribute with a value of username for usernames.

If you've implemented an "email first" sign-in flow that separates the username and password into two separate forms, include a form field containing the username in the form used to collect the password. You can, of course, hide this field via CSS if that's appropriate for your layout.

Add an autocomplete attribute with a value of current-password for the password field on a sign-in form.

Add an autocomplete attribute with a value of new-password for the password field on sign-up and change-password forms.

If you require the user to type their password twice during sign-up or password update, add the new-password autocomplete attribute on both fields.

<form id = "login" action = "signup.php" method = "post">
  <input type = "text" autocomplete = "new-password">
  <input type = "password" autocomplete = "new-password">
  <input type = "submit" value = "Sign Up">
</form>

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

William 07.06.2021 17:59

На данный момент (май 2019 г.) хорошо работает только autocomplete = "new-password".

Это можно сделать программно с помощью jQuery, например:

$('form, input, select').attr('autocomplete', 'new-password');

Это работа для меня. Спасибо

Brijesh Tanwar 18.03.2021 08:36

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

Пример JQuery:

  $(document).ready(function() {

    $('#[FORM_ID] input').prop('disabled',true);
   setTimeout(function(){ $('#[FORM_ID] input').prop('disabled',false); }, 1000);
});

Замените # [FORM_ID] идентификатором вашей формы.

Работай со мной

  <input [name] = "nameControl" type = "text" autocomplete = "new-password">

в компоненте:

  this.nameControl = "name" + this.getRandomInt();

  getRandomInt() {
    return Math.floor(Math.random() * Math.floor(100));
  }

Добро пожаловать в Stack Overflow @Rinat! Попробуйте добавлять только те ответы, которых нет в списке выше. Этот же ответ указан выше несколько раз. Просто любезно! Спасибо!

dave4jr 22.08.2019 09:45

Использование jQuery в сентябре 2019 года. Единственное, чего я добился близкой к согласованности, - отключение автозаполнения / автозаполнения для всей формы:

$('.disable-autofill').focus(function () {
    $(this).attr('autocomplete', 'new-password');
});
$('.disable-autofill').blur(function () {
    $(this).removeAttr('autocomplete');
});

Затем примените класс к своим входам, например:

<input name = "first_name" class = "disable-autofill">

Вы должны удалить атрибут, потому что, если слишком много входов имеют autocomplete, хром снова начинает его игнорировать :)

СТАРЫЙ ОТВЕТ:

Вы можете попробовать брутфорс:

function annihilateChromesAutocomplete(){
    var clearAutocompleteInterval = setInterval(function(){
        var peskyAutocompletedInputs = document.querySelectorAll("input:-internal-autofill-selected");
        for(var i = (peskyAutocompletedInputs.length - 1); i > -1; i--){
            peskyAutocompletedInputs[i].value = peskyAutocompletedInputs[i].defaultValue;
        }
    }, 1);
    setTimeout(function(){
        clearInterval(clearAutocompleteInterval);
    }, 2000);
}

Обновлено:

Я наткнулся на более простое и понятное решение. Если вы сделаете type по умолчанию для ввода чем-то странным, например time, а затем измените type динамически с помощью JavaScript при загрузке страницы, Chrome будет искать n-й ввод time и в конечном итоге проигнорирует ваши вводы.

window.addEventListener('load', function(){
  var inputs = document.getElementsByTagName("input");
  for(var i = 0; i < inputs.length; i++){
    if (inputs[i].type == "time"){
      inputs[i].type = "text";
    }
  }
});
<input type = "time"/>
<input type = "time"/>
<input type = "time"/>
Of course, you can change specific inputs to whatever types you want. I'm just throwing out an example.

Если вам не нужно сохранять пароль в браузере, вот решение, использующее только css. Выберите type = "text" для поля ввода:

<input class = "text-security-disc" type = "text">

и добавить стиль для ввода, который скрывает текст:

.text-security-disc {
    -webkit-text-security: disc;
    -moz-text-security: disc;
    text-security: disc;
}

Это не работает для Mozilla Firefox, я использовал этот шрифт: https://github.com/noppa/text-security

Для React вы можете сделать что-то вроде этого -

<input id = {id} name = {'a'+Math.random()} type = "text" />

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

const value = document.getElementById(id)

(Отчасти так работает плагин jQuery Disable Auto Fill).

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

Mike Kormendy 12.10.2020 02:06

Решил эту проблему с помощью autocomplete = "нет"

<input type = "text" autocomplete = "nope" />

убедитесь, что ваш элемент ввода находится внутри тега <form>. отключение автозаполнения у меня не работало до этого.

Спрашивающий хочет отключить автозаполнение хромом. Ваша ссылка показывает, как его включить.

Lytigas 26.08.2020 10:27

@Lytigas, отключение автозаполнения не работало для меня никаким способом, пока не было помещено в тег <form>. извините за непонятность.

Dilusha Madusanka 27.08.2020 11:32

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

Lytigas 30.08.2020 08:06

Как отключить автозаполнение в Chrome 86+

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

  1. Добавьте класс .disable-autocomplete в любое поле (поля) ввода.
<input name = "blahblah" type = "text" class = "disable-autocomplete">
  1. Отключите автозаполнение адреса, задав уникальное значение автозаполнения, и регулярное автозаполнение, задав уникальный идентификатор.
<script src = "https://code.jquery.com/jquery-3.5.1.js"></script>
<script>
var uniqueAutocompleteID = + new Date();
$(".disable-autocomplete").attr("autocomplete", uniqueAutocompleteID);
$(".disable-autocomplete").attr("id", uniqueAutocompleteID);
</script>

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

Sandeep J Patel 08.04.2021 17:20

Попробуйте https://github.com/terrylinooo/disableautofill.js

<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/disableautofill.min.js"></script>

Применение:

 var daf = new disableautofill({
    'form': '#testForm',
    'fields': [
        '.test-pass',  // password
        '.test-pass2'  // confirm password
    ],
    'debug': true,
    'callback': function() {
        return checkForm(); // Form validator
    }
});

daf.init();

Я мог бы решить это с помощью этого кода:

<form autocomplete = "off">
 <input type = "text" name = "text" autocomplete = "off" spellcheck = "off" autocorrect = "off"/>
</form>

Используйте autocomplete = "off", чтобы отключить autocomplete

и type = "search" для отключения адреса autofill

Что делать, если type = "tel"?

mediaguru 10.06.2021 21:39

Другие вопросы по теме