Ответ 1
Если я правильно понимаю исходный код Firefox, браузер сначала ищет поля пароля в формах. Если форма содержит более трех полей пароля, функция автозаполнения игнорирует эту форму.
После поиска от 1 до 3 полей пароля браузер ищет поле для входа. Браузер выполняет обратный поиск, начиная с поля первого пароля, и предполагает, что поле входа является первым найденным полем типа text
или email
или url
или tel
или number
.
Следующий шаг зависит, проверяем ли формы на загрузке страницы или при отправке формы. Если мы проверяем во время загрузки страницы и есть поле входа в систему и только одно поле пароля, случай прост и браузер может заполнить форму.
Другие случаи (ввод формы или более одного поля пароля) выполняют некоторую "умную" логику, чтобы определить, в каком поле пароля содержится новый пароль, а какой - старый пароль, возможно, для обновления сохраненных паролей). Если вас интересуют подробности, загрузите исходный код и откройте файл toolkit/components/passwordmgr/nsLoginManager.js
. Функции для проверки: _fillForm
, _getFormFields
и _getPasswordFields
.
Чтобы подвести итог, Firefox не нуждается в атрибутах ID, имени или класса, чтобы угадать, в каком поле находится логин или пароль. Он просто полагается на типы и порядок полей формы.