Ну, трохи пізно на вечірку, але, здається, є трохи непорозумінь щодо того, як autocomplete
слід і не слід працювати. Відповідно до специфікацій HTML, агент користувача (у цьому випадку Chrome) може змінювати autocomplete
:
https://www.w3.org/TR/html5/forms.html#autofilling-form-controls:-the-autocomplete-attribute
Агент користувача може дозволити користувачеві замінити ім'я поля автозаповнення елемента, наприклад, змінити його з "вимкнено" на "ввімкнено", щоб значення можна було запам'ятати і попередньо заповнити, незважаючи на заперечення автора сторінки, або завжди "вимкнено", ніколи не пам'ятаючи значення. Однак користувацькі агенти не повинні дозволяти користувачам тривіально переосмислювати ім'я поля автозаповнення з "вимкнено" на "увімкнено" або інші значення, оскільки для користувача є значні наслідки для безпеки, якщо всі значення завжди запам'ятовуються, незалежно від уподобань сайту.
Так, що стосується Chrome, розробники по суті сказали, "ми залишимо це користувачеві, щоб він вирішив у своїх перевагах, хочуть вони autocomplete
працювати чи ні. Якщо ви цього не хочете, не вмикайте його у своєму браузері". .
Однак, схоже, це з моєї сторони трохи надто ревно, але це так і є. У специфікації також обговорюються можливі наслідки такого кроку для безпеки:
Ключове слово "вимкнено" вказує або на те, що вхідні дані управління є особливо чутливими (наприклад, код активації ядерної зброї); або що це значення, яке ніколи не буде використане повторно (наприклад, одноразовий ключ для входу в банк), і тому користувачеві доведеться кожного разу чітко вводити дані, замість того, щоб мати можливість покластись на 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" для полів введення імені користувача та пароля, браузер все одно запропонує запам'ятати це логін, і якщо користувач погодиться, браузер автоматично заповнить ці поля наступного разу, коли користувач відвідає цю сторінку.
Така поведінка у Firefox (з версії 38), Google Chrome (з 34) та Internet Explorer (з версії 11).
Нарешті трохи інформації про те, належить атрибут form
елементу чи input
елементу. Спеціалізація знову має відповідь:
Якщо атрибут автозаповнення пропущено, замість нього використовується значення за замовчуванням, що відповідає стану атрибута автозаповнення власника форми елемента (або "увімкнено", або "вимкнено"). Якщо власника форми немає, тоді використовується значення "увімкнено".
Тому. Нанесення його на форму має стосуватися всіх полів введення. Нанесення його на окремий елемент має стосуватися саме цього елемента (навіть якщо у формі його немає). Якщо він autocomplete
взагалі не встановлений, він за замовчуванням on
.
Підсумок
Щоб вимкнути autocomplete
всю форму:
<form autocomplete="off" ...>
Або якщо вам потрібно це зробити динамічно:
<form autocomplete="random-string" ...>
Відключення autocomplete
окремого елемента (незалежно від того, присутній чи ні налаштування форми)
<input autocomplete="off" ...>
Або якщо вам потрібно це зробити динамічно:
<input autocomplete="random-string" ...>
І пам’ятайте, що певні агенти користувача можуть перекрити навіть ваші найскладніші спроби відключити autocomplete
.