Это ошибка автозаполнения в Chrome 81?
На моем главном компьютере под управлением Ubuntu 18.04 и Chrome 78 эта форма работает, как я и ожидал, - каждая форма может быть заполнена независимо.
form {
border: solid 1px black;
padding: 1em;
display: inline-block;
}
form input {
display: block;
}
<form>
<label> name<input type = "text" name ="name" /> </label>
<label> phone<input type = "text" name ="phone" /> </label>
<label> email<input type = "text" name ="email" /> </label>
<button type="submit"> submit</button>
</form>
<form>
<label> name <input type = "text" name ="name"/> </label>
<label> phone<input type = "text" name ="phone" /> </label>
<label> email <input type = "text" name ="email"/> </label>
<button type="submit"> submit</button>
</form>
Однако - в Chrome 81 на компьютере с Windows - выбор автозаполнения во второй форме также приведет к заполнению первой формы.
Это ошибка или правильное поведение автозаполнения?
Если так, есть ли трекер ошибок, где это задокументировано?
1 ответ
Именованные поля в HTML-форме хранятся со своими значениями браузером в профиле пользователя, поэтому их можно повторно использовать в других формах с помощью механизма автозаполнения. Поле с тем же именем затем используется глобально на этом веб-сайте и на всех других веб-сайтах, имеющих поля с таким же именем.
В статье Chromium формы автозаполнения это видно из структуры таблицы базы данных SQLite, в которой эти значения хранятся в виде пар, где столбцы таблицы: pair_id, name, value, count. Здесь видно, что исходный веб-сайт и URL-адрес исходной страницы здесь не отображаются и не имеют значения.
Вы использовали стандартные имена для полей формы, которые можно найти в различных стандартах: имя, телефон, электронная почта. Некоторые браузеры даже позволяют вводить значения для них в определении профиля, которое затем автоматически заполняет браузер для всех форм, используя эти стандартные имена полей. Браузер хранит все значения полей, а не только те, которые имеют известные имена.
Вы дважды использовали одни и те же имена, которые браузер сохранит в вашем профиле для повторного использования. При автозаполнении он будет использовать только одно из значений, введенных вами для полей с одинаковыми именами, на основе своих внутренних алгоритмов, например, последнего введенного или наиболее часто используемого. По сути, вы объявили, что значения в обеих формах полей должны быть идентичными, что браузер сделал в соответствии с запросом, автоматически заполнив затем одинаковыми значениями.
Существуют и другие известные варианты названий полей, которые вы использовали. Например, помимо имени, которое вы использовали, существуют имена fname, mname и lname для имени, отчества и фамилии.
В HTML5 стандарт формы был расширен с добавлением autocomplete
tag-атрибут, позволяющий различать, например, рабочий и домашний телефонные номера. Например:
<p><label>Customer name: <input name="custname" required autocomplete="shipping name"></label></p>
<p><label>Telephone: <input type=tel name="custtel" autocomplete="shipping tel"></label></p>
<p><label>E-mail address: <input type=email name="custemail" autocomplete="shipping email"></label></p>
Полезные ссылки: