【问题标题】:How do browsers decide what data to use for auto-fill on each input?浏览器如何决定使用哪些数据来自动填充每个输入?
【发布时间】:2021-03-22 08:45:18
【问题描述】:

我看到其他问题询问自动填充的工作原理,但答案都解释了如何使其工作,这不是我想要的。我想阻止它工作。而且我也意识到有很多问题都在问这个具体的事情,但答案总是设置 autocomplete=off,我们都知道这是无用的,因为浏览器不支持它。

除此之外,我的问题有点不同,因为我真正要问的是浏览器如何决定哪些输入要填充哪些数据,因为我希望有了这些知识,我可以防止我遇到的问题有。

我遇到的具体问题是,每次打开“更改密码”页面时,我的搜索输入都会自动填充用户名。我试图了解它为什么会这样做,以便我可以阻止它。

我的输入没有名称、标签或自动完成属性。就像这里显示的那样非常简单。那么在什么情况下,浏览器找到 id 为“searchinput”的字段并认为用用户名自动填充它是有意义的?

<input type=text id=searchinput placeholder='Search'>

另外,在更改密码页面上,两个密码字段中的第一个是自动填写的(大概是匹配的密码,但我看不到,因为都是圆圈)。那么为什么这些浏览器会使用用户名自动填充我的搜索输入,我该如何防止呢?

为了进一步解释我的代码在做什么:当用户从菜单中选择“更改密码”时,我将更改密码页面加载到现有页面上的一个 div 中(使用 jquery 加载)并将其向下滑动以覆盖大多数浏览器窗口(减去标题和菜单),这意味着他们当前所在的页面仍然在下面,这也是我的搜索输入仍然可见的原因。一旦我加载我的更改密码页面,自动填充就会发生。

【问题讨论】:

  • 我不认为有一个规范,每个浏览器都有自己的启发式,程序员经常在新版本中更新它们。

标签: html autofill


【解决方案1】:

在我的特定情况下,输入字段自动填充用户名的原因是 Chrome 会自动填充它找到的第一个密码字段(您无法停止),然后还会自动填充DOM 中密码字段之前的任何输入字段的用户名,无论该字段的名称、ID 或用途是什么。就我而言,它是搜索输入。

因此,为了解决这个问题,我必须在新密码输入之前创建另一个输入,并使用绝对定位将其隐藏在视野之外,以便 Chrome 将填充这个无用的字段而不是我的搜索输入。叹息。

<input type=text style='width:0px;position:absolute;right:-100px'>

我还添加了一个“看不见”的密码字段,以便 Chrome 自动填充此字段,而不是我表单中的第一个密码字段。

<input type=password style='width:0px;position:absolute;right:-100px'>

【讨论】:

    猜你喜欢
    • 2023-01-31
    • 2014-09-14
    • 2013-04-04
    • 2021-02-25
    • 1970-01-01
    • 2012-03-07
    • 2018-12-04
    • 2013-02-04
    相关资源
    最近更新 更多