Вимкнути автозаповнення через CSS


94

Чи можна використовувати CSS для вимкнення автозаповнення елемента форми (зокрема, текстового поля)?

Я використовую бібліотеку тегів, яка не дозволяє елемент автозаповнення, і я хотів би відключити автозаповнення без використання Javascript.

Відповіді:


52

Ви можете використовувати згенерований idі nameщоразу, який відрізняється, тому браузер не може запам'ятати це текстове поле і не зможе запропонувати деякі значення.

Це, принаймні, безпечна альтернатива для переглядачів, але я б рекомендував піти з відповіддю від RobertsonM ( autocomplete="off").


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

4
Приємна ідея, але це не заважає зберігати номери кредитних карток у незашифрованій базі даних автозаповнення.
Hans-Peter Störr

Якщо ви не використовуєте статичні керуючі імена / ідентифікатори, тоді будь-який сценарій буде порушено, а будь-який збір даних форми також порушиться (якщо кожен аспект вашої програми не знає нової конвенції про іменування та не динамічно оновлює будь-який сценарій / збір даних. ).
Gary Richter

Я повинен уникати автозаповнення, "рандомізація" назв полів - єдиний реальний шлях. Використання будь-яких підказок, як-от autocomplete="off", буде проігноровано у версії браузера X (поточна + 1). (Наприклад, остання версія Google Chrome ігнорує автозаповнення = вимкнено.)
Мікко Ранталайнен

@kmoser: Навіть якщо ви переможете функцію автозаповнення браузера шляхом рандомізації елемента, idвін все одно збереже його в кеш-пам'яті (тобто на жорсткому диску користувача). Що жахливо робити з чиїмось номером кредитної картки або будь-якою іншою конфіденційною інформацією. Крім того, це зайво захаращує дисководи вашого користувача. Кожного разу, коли вони відвідують вашу сторінку, на їх комп’ютері зберігатиметься новий (схожий на файли cookie) файл. Просто на халепу, спробуйте очистити кеш-пам’ять Chrome і подивитися, скільки місця вона звільнить (якщо ви цього не робили деякий час). Тому я називаю це жахливою ідеєю.
c00000fd

129

На даний момент в CSS немає атрибута "автозаповнення". Однак у html є простий код для цього:

<input type="text" id="foo" value="bar" autocomplete="off" />

Якщо ви шукаєте ефектор на всьому сайті, простим було б просто мати функцію js для проходження всіх "входів" та додавання цього тегу, або шукати відповідний клас / ідентифікатор css.

Атрибут автозаповнення чудово працює в Chrome та Firefox (!), Але також див. Чи існує W3C дійсний спосіб вимкнути автозаповнення у формі HTML?


4
developer.mozilla.org/en-US/docs/Web/Security/… пропонує autocomplete="anyrandominvalidvalue"працювати.
Ендрю Сталкер,

49

Ви можете легко реалізувати за допомогою jQuery

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

4
У більшості випадків $ ('form'). Attr ('autocomplete', 'off'); набагато ефективніше (див. коментар до відповіді нижче)
irakli

@irakli У моєму випадку використання form- це ЄДИНА річ, яка спрацювала. Ні input. Дякую.
khaverim

1
Привіт, 2018 рік, і це майже єдиний спосіб, яким я можу змусити це працювати сьогодні. Крім того, @irakli це вірно, якщо вам потрібно використовувати для цілої форми нам форму як селектор.
Devon Kiss

15

Якщо ви використовуєте a, formви можете вимкнути всі автозавершення за допомогою,

<form id="Form1" runat="server" autocomplete="off">

дійсно, за Mozilla: "Якщо атрибут автозаповнення не вказаний у вхідному елементі, тоді браузер використовує значення атрибута автозаповнення власника форми елемента <input>. Власником форми є або елемент форми, яким є цей елемент <input> нащадок або елемент форми, ідентифікатор якого вказаний атрибутом form вхідного елемента. Для отримання додаткової інформації див. атрибут автозаповнення в <form>. " враховуючи це, набагато ефективнішою альтернативою jQuery до наведеної вище буде: $ ('form'). attr ('autocomplete', 'off');
irakli

13

CSS не має цієї можливості. Вам потрібно буде використовувати сценарії на стороні клієнта.


1
Будь-яка ідея, як відключити це в краю? Незалежно від того, що ми робимо, ми це бачимо.
Бенджамін Груенбаум,

@BenjaminGruenbaum Using autocomplete="false"буде працювати в Edge. Технічно будь-яке недійсне значення тут може замінювати значення "false".
Ендрю

4

Я спробував усі запропоновані способи відповідей на це запитання та інших статей в Інтернеті, але все одно не працював. Я спробував autocomplete = "new-random-value", autocomplete = "off" в елементі форми, використовуючи скрипт на стороні клієнта, як показано нижче, але за межами $ (document) .ready (), як зазначив один із користувачів:

$(':input').on('focus', function () {
  $(this).attr('autocomplete', 'off')
});

Я знайшов, можливо, ще один пріоритет у браузері, що спричиняє цю дивну поведінку! Тож я шукав більше і, нарешті, ще раз уважно прочитав рядки цієї гарної статті :

З цієї причини багато сучасних браузерів не підтримують autocomplete = "off" для полів входу:

Якщо сайт встановлює автозаповнення = "вимкнено" для, а форма включає поля введення імені користувача та пароля, тоді браузер все одно запропонує запам'ятати цей логін, і якщо користувач погодиться, браузер автоматично заповнить ці поля наступного разу, коли користувач відвідує сторінку. Якщо сайт встановлює autocomplete = "off" для полів імені користувача та пароля, тоді браузер все одно запропонує запам'ятати цей логін, і якщо користувач погодиться, браузер автоматично заповнить ці поля наступного разу, коли користувач відвідає сторінку. Це поведінка у Firefox (з версії 38), Google Chrome (з 34) та Internet Explorer (з версії 11).

Якщо ви визначаєте сторінку управління користувачами, де користувач може вказати новий пароль для іншої особи, і тому ви хочете запобігти автоматичному заповненню полів паролів, ви можете використовувати autocomplete = "new-password" ; проте підтримка цього значення у Firefox не реалізована.

Це просто спрацювало. Я спробував спеціально в chrome, і сподіваюся, це продовжує працювати і допомагати іншим.


1

Я вирішив проблему, додавши фальшиве ім'я автозаповнення для всіх входів.

$("input").attr("autocomplete", "fake-name-disable-autofill");

0

Завдяки рішенню @ ahhmarr мені вдалося вирішити ту саму проблему в моєму середовищі користувальницького інтерфейсу Angular + , яку я поділюсь тут для тих, хто зацікавлений.

У свій index.htmlя додав такий сценарій:

<script type="text/javascript">
    setTimeout(function() {
        $('input').attr('autocomplete', 'off');
    }, 2000);
</script>

Потім, щоб охопити зміни стану, я додав у свій кореневий контролер наступне:

$rootScope.$on('$stateChangeStart', function() {
                $timeout(function () {
                    $('input').attr('autocomplete', 'off');
                }, 2000);
            });

Час очікування для html, щоб відтворити перед застосуванням jquery.

Якщо ви знайдете краще рішення, повідомте мене про це.


0

Ви не можете використовувати CSS для вимкнення автозаповнення, але ви можете використовувати HTML:

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

Технічно ви можете замінити falseбудь-яке недійсне значення, і воно буде працювати. Це iOS, єдине рішення, яке я знайшов, яке також працює в Edge.


0

Є 3 шляхи до цього, я згадую їх, щоб бути кращим способом ...

1-HTML спосіб:

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

2-Javascript спосіб:

document.getElementById("input-id").getAttribute("autocomplete") = "off";

3-jQuery спосіб:

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

0

Я просто використовую 'new-password'замість цього'off' на автозаповнення.

і я також намагаюся використовувати цей код і працює (принаймні з мого боку), я використовую WP та GravityForm для вашої інформації

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

-5
$('input').attr('autocomplete','off');

3
Це не дає відповіді на поставлене запитання. OP спеціально попросив рішення CSS. Крім того, це точно така ж відповідь, як і вже існуюче.
Holger Just
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.