Или Как Firefox определяет, где находится пароль/имя пользователя?
Если я изменю имя, id, заголовок, класс элемента ввода Firefox, он заполняет его паролем или электронной почтой.
Или Как Firefox определяет, где находится пароль/имя пользователя?
Если я изменю имя, id, заголовок, класс элемента ввода Firefox, он заполняет его паролем или электронной почтой.
Если я правильно понимаю исходный код Firefox, браузер сначала ищет поля пароля в формах. Если форма содержит более трех полей пароля, функция автозаполнения игнорирует эту форму.
После поиска от 1 до 3 полей пароля браузер ищет поле для входа. Браузер выполняет обратный поиск, начиная с поля первого пароля, и предполагает, что поле входа является первым найденным полем типа text
или email
или url
или tel
или number
.
Следующий шаг зависит, проверяем ли формы на загрузке страницы или при отправке формы. Если мы проверяем во время загрузки страницы и есть поле входа в систему и только одно поле пароля, случай прост и браузер может заполнить форму.
Другие случаи (ввод формы или более одного поля пароля) выполняют некоторую "умную" логику, чтобы определить, в каком поле пароля содержится новый пароль, а какой - старый пароль, возможно, для обновления сохраненных паролей). Если вас интересуют подробности, загрузите исходный код и откройте файл toolkit/components/passwordmgr/nsLoginManager.js
. Функции для проверки: _fillForm
, _getFormFields
и _getPasswordFields
.
Чтобы подвести итог, Firefox не нуждается в атрибутах ID, имени или класса, чтобы угадать, в каком поле находится логин или пароль. Он просто полагается на типы и порядок полей формы.
Я пробовал простое решение, которое работает до сих пор. Создайте 2 скрытых поля, и браузер автоматически выполнит их.
<input type="text" style="display: none">
<input type="password" style="display: none">
Являются ли эти два элемента только формой? Вероятно, Firefox сохраняет структуру формы (два поля ввода, один помечен как обычный, один помечен как пароль) и заполнение сохраненной информации без учета идентификатора входных элементов.
Попробуйте это: добавьте дополнительный элемент ввода в форму и посмотрите, что произойдет. Ни один Firefox не заполнит ничего, или вы найдете свое имя в первом поле и заполненном поле пароля, тогда как второй элемент ввода пуст.
Похоже, что использование входного текста с отключенным входом между входами и входами с паролями хорошо подходит:
<input type="text" disabled="disabled" style="display:none">