Forms 如何通过自动填充检测是否已填充任何表单元素?

Forms 如何通过自动填充检测是否已填充任何表单元素?,forms,javascript-events,detect,autofill,Forms,Javascript Events,Detect,Autofill,我有一个登录表单,需要执行以下操作: 允许自动填充,以便希望在不键入的情况下登录的用户可以继续这样做 检测表单上是否使用了autofill,因此当用户稍后尝试访问需要在不使用autofill的情况下登录的网站部分时,如果用户在第一个表单上使用了autofill,我只会提示用户再次登录(使用不允许自动填充的登录表单的不同版本) 目前,我还没有找到一种可靠的方法来检测是否使用了自动填充功能(例如,Firefox、Chrome、Google Toolbar等)-->任何不需要用户键入就可以填写表单

我有一个登录表单,需要执行以下操作:

  • 允许自动填充,以便希望在不键入的情况下登录的用户可以继续这样做
  • 检测表单上是否使用了autofill,因此当用户稍后尝试访问需要在不使用autofill的情况下登录的网站部分时,如果用户在第一个表单上使用了autofill,我只会提示用户再次登录(使用不允许自动填充的登录表单的不同版本)
目前,我还没有找到一种可靠的方法来检测是否使用了自动填充功能(例如,Firefox、Chrome、Google Toolbar等)-->任何不需要用户键入就可以填写表单字段的机制在这里都被视为“自动填充”)。因此,现在我只是让用户在没有自动填充的情况下第一次登录(因为这是一项重要的业务要求),然后当他们到达站点的敏感部分时,提示他们从禁用自动填充的表单登录,即使事实上他们在第一个表单上键入了用户名和密码

如果有人找到了一种可靠的方法来检测所有形式的自动填充,我很想听听


谢谢

我不想这么说,但是,你不能这么说,更重要的是,你(开发人员)也不能这么说

你必须想象一下,今天内置在浏览器中的自动填充是去年的旧自动填充应用程序。他们坐在浏览器DOM影响之外,从字面上调查已知窗口的已知属性,即表单,并直接发送按键,就好像用户键入了它们一样

当前的浏览器内置了自动填充选项,但它们仍然与旧应用程序一样不标准,因此无法(可靠地)检测到


要么忽略它们,要么通过JavaScript始终为空白输入字段。

p.s.一种方法的大致思路是,每次在任何输入字段中出现击键时,使用JavaScript记录(测量手动输入的信息量,确保处理用户单击删除或退格的特殊情况)然后检查提交时输入字段中有多少个字符。如果数字不同,则表明使用了自动填充。但这只是一个未经测试的想法,这是否适用于IE6+、FF3+、Chrome和Safari还有待观察。假设所有输入都有空的默认值。计时击键+检查输入长度与击键次数(在考虑退格、删除等因素后)将是一种不完美的方式。但它仍然不是万无一失或完美的。我们无法区分自动填充的数据和粘贴的数据(来自剪贴板)。