Как определить, были ли заполнены какие-либо элементы формы с помощью автозаполнения?

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