#javascript #forms #dom-events #autofill
#javascript #формы #dom-события #автозаполнение
Вопрос:
У меня есть форма входа, где мне нужно выполнить следующее:
- разрешить автозаполнение, чтобы пользователи, которые хотят войти в систему без ввода, могли продолжать это делать
- определить, использовалось ли автозаполнение в форме, поэтому, когда пользователь позже попытается получить доступ к частям сайта, которые требуют входа без автозаполнения, я только предложу пользователю войти снова (с другой версией формы входа, которая вместо этого не допускает автозаполнения), если они использовали автозаполнение в первой форме
В настоящее время я не нашел способа надежно определить, использовалось ли автозаполнение (IE, Firefox, Chrome, панель инструментов Google и т.д. -> любой механизм, с помощью которого поля формы заполняются без ввода пользователем, будет считаться здесь «автозаполнением»). Итак, на данный момент я просто разрешаю пользователям входить в систему в первый раз без автозаполнения (поскольку это важное бизнес-требование), а затем предлагаю им войти в систему из формы с отключенным автозаполнением, когда они попадают в конфиденциальную часть сайта, даже если они фактически ввели свое имя пользователя и пароль в первой форме.
Если кто-нибудь нашел надежный способ обнаруживать (не блокировать) все формы автозаполнения, я хотел бы услышать об этом.
Комментарии:
1. p.s. приблизительная идея одного из подходов заключалась бы в использовании javascript для регистрации каждого нажатия клавиши в любом из полей ввода (измерьте, сколько информации было введено вручную, убедившись, что обрабатывается особый случай, когда пользователь нажимает delete или backspace), а затем сверьте это с количеством символов, присутствующих в полях ввода при отправке. Если число отличается, это, по-видимому, указывает на то, что использовалось автозаполнение. Но это всего лишь непроверенная идея, еще предстоит выяснить, будет ли это работать, скажем, в IE6 , FF3 , Chrome, Safari. Предполагается, что все входные данные имеют пустые значения по умолчанию.
2. Выбор времени нажатия клавиш проверка длины ввода в зависимости от количества нажатий клавиш (после учета обратного пробела, удаления и т.д.) Было Бы несовершенным способом сделать это. Но это все равно не было бы надежным или идеальным. Мы не сможем отличить данные, заполненные автоматически, от вставленных данных (из буфера обмена).
Ответ №1:
Я ненавижу это говорить, но вы не можете и, что более важно, вы (разработчик) тоже не должны быть способны.
Вы должны представить, что автозаполнение, встроенное в браузеры сегодня, — это старые приложения автозаполнения прошлых лет. Они находились вне влияния DOM браузера и буквально опрашивали известные окна на предмет известных свойств, то есть форм, и отправляли нажатия клавиш напрямую, как если бы пользователь их набрал.
Текущие браузеры имеют встроенные опции автозаполнения, но они по-прежнему такие же нестандартные, как и старые приложения, и поэтому их невозможно (надежно) обнаружить.
Либо игнорируйте их, либо всегда оставляйте пустыми поля ввода с помощью JavaScript.