浏览器如何决定每个输入的 auto-fill 使用什么数据?
How do browsers decide what data to use for auto-fill on each input?
我看到其他问题询问 auto-fill 是如何工作的,但答案都解释了如何使其工作,这不是我想要的。我想阻止它工作。我也意识到有很多问题都在问这个具体的事情,但答案总是设置 autocomplete=off,我们都知道这是无用的,因为浏览器不支持它。
除此之外,我的问题有点不同,因为我真正想问的是浏览器如何决定哪些输入填充哪些数据,因为我希望有了这些知识我可以防止我遇到的问题有。
具体来说,我遇到的问题是每次打开“更改密码”页面时,我的搜索输入都会自动填充用户名。我试图了解它为什么这样做,以便我可以阻止它。
我的输入没有名称、标签或自动完成属性。它非常简单,如图所示。那么在什么宇宙中,浏览器找到 ID 为“searchinput”的字段并认为用用户名 auto-fill 它有意义?
<input type=text id=searchinput placeholder='Search'>
另外,在更改密码页面上,自动填写了两个密码字段中的第一个(大概是匹配的密码,但我看不到,因为都是圆圈)。那么,为什么这些浏览器 auto-fill 使用用户名搜索我的搜索输入,我该如何防止呢?
进一步解释一下我的代码在做什么:当用户从菜单中选择“更改密码”时,我将更改密码页面加载到 div(使用 jquery 加载)在现有页面上向下滑动以覆盖大部分浏览器 window(减去 header 和菜单),这意味着他们当前所在的任何页面仍然在下面,这也是我的原因搜索输入仍然可见。 auto-fill 在我加载更改密码页面后立即发生。
在我的特殊情况下,输入字段被自动填充用户名的原因是因为 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'>
我看到其他问题询问 auto-fill 是如何工作的,但答案都解释了如何使其工作,这不是我想要的。我想阻止它工作。我也意识到有很多问题都在问这个具体的事情,但答案总是设置 autocomplete=off,我们都知道这是无用的,因为浏览器不支持它。
除此之外,我的问题有点不同,因为我真正想问的是浏览器如何决定哪些输入填充哪些数据,因为我希望有了这些知识我可以防止我遇到的问题有。
具体来说,我遇到的问题是每次打开“更改密码”页面时,我的搜索输入都会自动填充用户名。我试图了解它为什么这样做,以便我可以阻止它。
我的输入没有名称、标签或自动完成属性。它非常简单,如图所示。那么在什么宇宙中,浏览器找到 ID 为“searchinput”的字段并认为用用户名 auto-fill 它有意义?
<input type=text id=searchinput placeholder='Search'>
另外,在更改密码页面上,自动填写了两个密码字段中的第一个(大概是匹配的密码,但我看不到,因为都是圆圈)。那么,为什么这些浏览器 auto-fill 使用用户名搜索我的搜索输入,我该如何防止呢?
进一步解释一下我的代码在做什么:当用户从菜单中选择“更改密码”时,我将更改密码页面加载到 div(使用 jquery 加载)在现有页面上向下滑动以覆盖大部分浏览器 window(减去 header 和菜单),这意味着他们当前所在的任何页面仍然在下面,这也是我的原因搜索输入仍然可见。 auto-fill 在我加载更改密码页面后立即发生。
在我的特殊情况下,输入字段被自动填充用户名的原因是因为 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'>