Це помилка автозаповнення в Chrome 81?


2

На моєму головному комп’ютері, що працює під управлінням 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>

CodePen

Однак у Chrome 81 на машині Windows - вибір автозаповнення другої форми призведе до заповнення першої форми.

Це помилка чи правильна поведінка автозаповнення?

Якщо так, то чи є інструмент відстеження помилок, де це задокументовано?


Ви надаєте поля однакові nameв обох формах. Щоб розрізнити їх, вкажіть поля різні назви у кожній формі.
harrymc

Chrome "78 і 81" ? Ви, мабуть, мали на увазі "68 і 71"? Ще немає Chrome 81 - поточна стабільна версія - 71 і навіть канарний канал - лише 74.
Допитливий Lurker

Відповіді:


0

Названі поля у формі HTML зберігаються зі своїми значеннями браузером у профілі користувача, тому можуть бути використані повторно в інших формах через механізм автоматичного заповнення. Потім поле з тим самим іменем використовується глобально на цьому веб-сайті та на всіх інших веб-сайтах, що мають поля з тим самим іменем.

У статті Chromium форми автозаповнення це можна побачити зі структури таблиці бази даних SQLite, яка зберігає ці значення у вигляді пар, де стовпці стовпців є: pair_id, ім'я, значення, кількість . Тут видно, що початковий веб-сайт та оригінальна URL-адреса сторінки не відображаються тут і не мають значення.

Ви використовували стандартні імена для форм форми, які можна знайти в різних стандартах: ім'я, телефон, електронна пошта . Деякі браузери навіть дозволяють вводити значення для них у визначення профілю, який браузер автоматично заповнює всі форми, використовуючи ці стандартні імена полів. У браузері зберігаються всі значення поля, не тільки ті, що мають відомі імена.

Ви два рази використовували одні і ті ж імена, які браузер зберігатиме у вашому профілі, щоб знову використовувати їх. Під час автоматичного заповнення воно використовуватиме лише одне із введених вами значень для полів з однойменною назвою, виходячи з його внутрішніх алгоритмів, наприклад, останніх або найбільш використовуваних. Насправді ви заявили, що значення в обох формах полів повинні бути однаковими, що браузер зробив так, як вимагається автозаповненням, а потім однаковими значеннями.

Є й інші відомі варіанти імен полів, які ви використовували. Наприклад, до того ж ім'я , яке ви використовували, існує Fname , mname і LName , для перших, середніх і прізвищ.

У HTML5 стандарт форми було розширено з додаванням autocompleteтега-атрибута, який дозволяє розрізняти, наприклад, робочі та домашні номери телефонів. Наприклад:

<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>

Корисні посилання:


Я відчуваю, що ця відповідь не пояснює різницю в поведінці між 79 та 81
користувач1068446

Я думаю, що Chrome рухається до кращого дотримання стандарту, і що цей розвиток мотивований еволюцією HTML5 обробки даних із формами. За вашими словами, обробка в Chrome 78 була нестандартною.
harrymc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.