【问题标题】:How to detect whether any form elements have been filled in via autofill?如何通过自动填充检测是否已填写任何表单元素?
【发布时间】:2011-08-24 06:04:21
【问题描述】:

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

  • 允许自动填充,以便用户无需输入即可继续登录
  • 检测表单上是否使用了自动填充,因此当用户稍后尝试访问需要登录而不使用自动填充的站点部分时,我只会提示用户再次登录(使用不同版本的登录表单,而不是允许自动填充)如果他们在第一个表单上使用了自动填充

目前我还没有找到一种方法来可靠地检测是否使用了自动填充(IE、Firefox、Chrome、Google 工具栏等 --> 任何无需用户输入而填写表单字段的机制都可以计算在内这里作为“自动填充”)。所以现在我只是让用户在没有自动填充的情况下首次登录(因为这是一个重要的业务需求),然后当他们到达网站的敏感部分时提示他们从禁用自动填充的表单登录,即使他们有事实上,在第一个表单上输入了他们的用户名和密码。

如果有人找到了一种可靠的方法来检测(而不是阻止)所有形式的自动填充,我很想听听。

谢谢!

【问题讨论】:

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

标签: forms javascript-events detect autofill


【解决方案1】:

我讨厌这么说,但你不能,更重要的是,你(开发者)也不应该这样做。

您必须想象今天浏览器内置的自动填充功能是过去的旧自动填充应用程序。他们坐在浏览器 DOM 影响之外,从字面上轮询已知窗口的已知属性(即表单)并直接发送击键,就像用户键入它们一样。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    • 2020-01-16
    • 2010-09-28
    • 1970-01-01
    • 2015-12-08
    • 2016-01-15
    相关资源
    最近更新 更多