Что такое автозаполнение?
При заполнении пользователем формы в интернете умница-браузер автоматически подставляет значения, основываясь на вводимых ранее аналогичных данных.
Что такое автодополнение?
При заполнении пользователем формы в интернете смышлёный браузер показывает возможные значения, основываясь на вводимых ранее аналогичных данных. Так пользователь может выбрать и принять подсказанный вариант.
Автозаполнение или автодополнение применяются к имени пользователя, паролю, номеру телефона, адресу, электронной почте, данным кредитной карты или любым другим произвольным полям.
Отличия между автозаполнением и автодополнением незначительны. Бывает, что веб-сайт поддерживает выполнение обеих функций в одной форме. Например, он предлагает варианты автодополнения при вводе имени пользователя, и, как только оно подобрано, автоматически вставляет соответствующий пароль.
Во многих ситуациях эти опции взаимозаменяемы. В спецификации HTML автозаполнение значится в официальной терминологии и предназначено для помощи пользователям в заполнении форм. С этой целью используется атрибут HTML autocomplete
для подсказки браузеру, как предоставить такую возможность или стоит ли вообще это делать.
Зачем нужны автозаполнение/автодополнение?
Эти функции помогают пользователям быстрее заполнять формы в интернете, особенно на мобильных устройствах. Для каждого веб-сайта рекомендуется создавать надежные и уникальные пароли. Как следствие, с запоминанием сложных из них возникают проблемы. Посредством автозаполнения/автодополнения браузеры запоминают информацию, а именно пароли, номера кредитных карт, адреса и т. д. Пользователю остается только решить, доверяет ли он средствам безопасности браузера.
В статье мы подробно рассмотрим, как браузеры автоматически заполняют стандартные поля кредитных карт, адресов и паролей.
Подключение/отключение автозаполнения
autocomplete
— это атрибут <form>
, указывающий на то, может ли браузер автоматически дополнять значение элемента управления. У автодополнения есть два основных значения:
on
: Браузеру разрешается предлагать или дополнять значение на основе ранее введенных вариантов. Он должен применить эвристику для выборки предлагаемых значений автодополнения.on
— значение по умолчанию.off
: Браузер не завершает ввод данных автоматически. Вместо этого пользователь каждый раз сам вводит значение в поле. Как правило, это означает, что информация слишком конфиденциальная и не подлежит кэшированию, или значение не предназначено для повторного использования, или приложение предоставляет собственный механизм автодополнения.
Поля ввода с автозаполнением
Атрибут autocomplete
можно установить на уровне <form>
для управления полями ввода или отдельно для каждого из них. Эти поля определяются элементами <input>
, <textarea>
и <select>
.
Ниже представлен код <input>
, выполняющийся в VSCode Live Server:
<!DOCTYPE html>
<html>
<body style="margin: 20px">
<form>
<input />
</form>
</body>
</html>
В браузере появляется поле ввода:
Почему же поле автоматически не заполняется, при том что значением по умолчанию является on
?
Для того чтобы функция autocomplete
заработала, как правило, требуется соблюдение трех условий:
- У элементов
<input>
/<select>
/<textarea>
присутствуют атрибутыname
и/илиid
. - Элементы
<input>
/<select>
/<textarea>
являются потомками элемента<form>
. - У формы имеется кнопка отправки.
Оговорка “как правило” была употреблена не случайно, поскольку в разных браузерах процедуры автозаполнения немного отличаются. Для обеспечения работы эвристики браузера рекомендованы и name
, и id
.
Изменим код HTML, чтобы привести его в соответствие с требованиями:
<!DOCTYPE html>
<html>
<body style="margin: 20px">
<form>
<input name="my-input" id="my-input" />
<input type="submit" />
</form>
</body>
</html>
В строке 6 установлены и name
, и id
, хотя в данном случае это не обязательно.
В строке 7 добавлена кнопка отправки.
Выполняем код. Вводим a
и отправляем форму.
Еще раз выполняем код. При нажатии на поле в качестве предлагаемого варианта появляется предыдущий ввод a
.
Для <input>
атрибут autocomplete
работает с типами hidden
, text
, search
, url
, tel
, email
, date
, month
, week
, time
, datetime-local
, number
, range
, color
и password
. А вот с checkbox
, radio
, file
или типами кнопок, которые не возвращают числовые или текстовые данные, он не действует.
Как насчет <textarea>
?
Он должен работать аналогично <input>
. Однако в браузерах такие реализации встречаются не часто.
А что по поводу <select>
?
В спецификации приводится пример, показывающий предыдущий выбор, Zambia
, в качестве первоочередного варианта.
Однако в браузерах такие реализации тоже встречаются не часто.
В большинстве случаев функция автозаполнения работает для элементов <input>
.
Токены автозаполнения
Когда autocomplete
для поля ввода установлен, помимо "on"
и "off"
он может принимать и другие значения. Они называются токенами автозаполнения (autofill detail token), представляющими из себя упорядоченный набор токенов, разделенных пробелами и определяемых следующим образом:
[section-](optional) [shipping|billing](optional) [home|work|mobile|fax|pager](optional) [autofill field name]
Как правило, имя поля автозаполнения представляет собой одно из следующих значений:
"name"
"honorific-prefix"
"given-name"
"additional-name"
"family-name"
"honorific-suffix"
"nickname"
"username"
"new-password"
"current-password"
"one-time-code"
"organization-title"
"organization"
"street-address"
"address-line1"
"address-line2"
"address-line3"
"address-level4"
"address-level3"
"address-level2"
"address-level1"
"country"
"country-name"
"postal-code"
"cc-name"
"cc-given-name"
"cc-additional-name"
"cc-family-name"
"cc-number"
"cc-exp"
"cc-exp-month"
"cc-exp-year"
"cc-csc"
"cc-type"
"transaction-currency"
"transaction-amount"
"language"
"bday"
"bday-day"
"bday-month"
"bday-year"
"sex"
"url"
"photo"
Помимо говорящих имен полей в списке присутствуют "cc"
и "bday"
, означающие соответственно кредитную карту и день рождения.
Обратимся к примерам:
section-blue shipping home street-address
shipping home street-address
home street-address
street-address
Токен автозаполнения определяет ожидаемое значение, на основании которого браузеру разрешается предоставлять возможные варианты, хотя это и не является строгим для него обязательством.
Рассмотрим следующий пример:
<!DOCTYPE html>
<html>
<body style="margin: 20px">
<form>
<input name="my-input" id="my-input" autocomplete="name" />
<input type="submit" />
</form>
</body>
</html>
autocomplete="name"
в строке 6 никак не отразилось на поле ввода:
Будет лучше, если мы определим name
и/или id
.
<!DOCTYPE html>
<html>
<body style="margin: 20px">
<form>
<input name="name" id="name" autocomplete="name" />
<input type="submit" />
</form>
</body>
</html>
После того как мы установили значение "name"
для name
и/или id
, браузер предлагает уже содержательные варианты.
Автозаполнение паролей, данных кредитной карты, адресов
Далее примером нам послужит Chrome. В других браузерах аналогичные действия выполняются несколько иным образом.
Ниже представлены настройки автозаполнения в Chrome: chrome://settings/autofill
.
На скриншоте отображены три типа автозаполнения: Passwords
, Payment methods
и Addresses and more
.
Рассмотрим их поочередно.
Поля кредитной карты
Переходим в настройки автозаполнения платежей в Chrome: chrome://settings/payments
.
На скриншоте предлагаются два варианта: 1) Сохранять и автоматически заполнять платежные данные (Save and fill payment methods
); 2) Разрешать сайтам проверять наличие сохраненных способов оплаты (Allow sites to check if you have payment methods saved
).
Добавляем платежные данные:
Выполняем следующий код на localhost.
<!DOCTYPE html>
<html>
<body style="margin: 20px">
<form>
<input name="cc-name" id="cc-name" autocomplete="cc-name" />
<input name="cc-number" id="cc-number" autocomplete="cc-number" />
<input name="cc-exp" id="cc-exp" autocomplete="cc-exp" />
<input type="submit" />
</form>
</body>
</html>
В строках 6, 7 и 8 у каждого поля ввода есть атрибуты name
, id
и autocomplete
. Для автозаполнения данных кредитной карты достаточно одного из них.
На localhost
появляется уведомление об отключении функции автозаполнения кредитной карты, поскольку данная форма не использует безопасное соединение:
Устанавливаем surge для публикации HTML-кода:
$ npm install --global surge
$ surge
project: /Users/jenniferfu/form/
domain: white-book.surge.sh
upload: [====================] 100% eta: 0.0s (1 files, 432 bytes)
CDN: [====================] 100%
encryption: *.surge.sh, surge.sh (275 days)
IP: 138.197.235.123Success! - Published to white-book.surge.sh
Вводим white-book.surge.sh
в URL, после чего в нашем примере происходит автозаполнение данных кредитной карты.
Выбираем данные кредитной карты, и имя владельца, номер и срок действия заполняются автоматически.
Поля адреса
Переходим в настройки автозаполнения адреса в Chrome: chrome://settings/addresses
.
Как видно на скриншоте, пользователю предлагается выбрать опцию Сохранять и автоматически заполнять адреса (Save and fill addresses
).
Добавляем адрес:
Выполняем код на localhost
:
<!DOCTYPE html>
<html>
<body style="margin: 20px">
<form>
<input name="name" id="name" autocomplete="name" />
<input name="organization" id="organization" autocomplete="organization" />
<br />
<input name="ship-street-address" id="ship-street-address" autocomplete="shipping street-address" />
<input name="ship-city" id="ship-city" autocomplete="shipping locality" />
<input name="ship-state" id="ship-state" autocomplete="shipping region" />
<input name="ship-zip" id="ship-zip" autocomplete="shipping postal-code" />
<br />
<input name="ship-country" id="ship-country" autocomplete="shipping country" />
<br />
<input type="submit" />
</form>
</body>
</html>
Для строк 9, 10, 11, 12 и 14 задействуем токен shipping
. Как вы могли заметить, locality
и region
не являются частями имен автозаполнения полей — это реализации Chrome.
Автозаполнение адреса успешно работает на localhost
.
Выбираем сведения об адресе, после чего поля имени, организации и адреса заполняются автоматически.
Поля пароля
Переходим в настройки автозаполнения паролей в Chrome: chrome://settings/passwords
.
Как видим на скриншоте, пользователю предлагается выбрать: Предлагать сохранение паролей (Offer to save passwords
) и Автоматический вход (Auto Sign-in
).
Для автозаполнения паролей существует три параметра, а именно website
, username
и password
, указанные в нижней части скриншота. website
управляется браузером, а username
и password
настраиваются кодом. В зависимости от вида хоста, будь то localhost
, хост типа surge
или обычное доменное имя, браузеры действуют по-разному. Он может проигнорировать настройки пароля, или предоставить значок ключа в адресной строке для ручного сохранения пароля, или для этой же цели автоматически вывести диалоговое окно.
Следующий код автоматически заполняет поля имени пользователя и пароля:
<!DOCTYPE html>
<html>
<body style="margin: 20px">
<form>
<input name="username" id="username" />
<input type="password" id="password" />
<input type="submit" />
</form>
</body>
</html>
Код публикуется на quaint-garden.surge.sh
. Вводим имя пользователя и пароль.
Нажимаем на значок ключа сверху над адресной строкой, после чего всплывает диалоговое окно для сохранения пароля. Нажимаем Save
.
Код работает как на localhost
, так и на quaint-garden.surge.sh
. Сохраненные пароли отображаются в соответствующих настройках.
Переходим на quaint-garden.surge.sh
— username
и password
автоматически заполняются.
Отключает ли autocomplete="off"
автозаполнение пароля?
К сожалению, браузеры не поддерживают autocomplete="off"
для полей авторизации. Если на сайте задано autocomplete="off"
для <form>
с полями username
и password
или непосредственно для полей username
и password
, то данная функция не отключается.
Для отключения автозаполнения пароля потребуется autocomplete="new-password"
для поля password
.
<!DOCTYPE html>
<html>
<body style="margin: 20px">
<form autoComplete="off">
<input name="username" id="username" />
<input type="password" id="password" autocomplete="new-password" />
<input type="submit" />
</form>
</body>
</html>
Код публикуется на plastic-snail.surge.sh
. Автозаполнение для username
отключено. В поле password
вас спросят, нужно ли повторно использовать ранее сохраненные комбинации username
/password
.
Очистка данных автозаполнения
Периодически возникает необходимость почистить данные автозаполнения. Для изменения его настроек или удаления сохраненных паролей, платежных данных и адресов переходим в chrome://settings/autofill
.
Если необходимо очистить все данные, переходим в chrome://settings/?search=history
и нажимаем на Clear browsing data
.
Во вкладке Advanced
выбираем Autofill form data
и нажимаем Clear data
.
Все данные для автозаполнения удаляются.
Возможно, потребуется перезапустить браузер для обновления состояния.
Заключение
Итак, из статьи вы узнали, что такое автозаполнение, как оно работает и как устанавливать его для стандартных полей, кредитных карт, адресов и паролей.
Освоение автозаполнения способствует созданию удобных для пользователя веб-приложения.
Благодарю за внимание. Надеюсь, информация была полезной.
Читайте также:
- Как посещать сайты, не заходя в браузер
- Создание простого веб-скрейпера на Ruby
- Как с легкостью создавать формы на React с помощью react-hook-form
Читайте нас в Telegram, VK и Дзен
Перевод статьи Jennifer Fu: 6 Autofill Features for Web Developers