我在几个表单上遇到了 chrome 自动填充行为的问题。
表单中的字段都有非常常见和准确的名称,例如“电子邮件”、“姓名”或“密码”,并且它们还设置了 autocomplete="off"
。
自动完成标志已成功禁用自动完成行为,当您开始输入时会出现一个值下拉列表,但没有更改 Chrome 自动填充字段的值。
这种行为是可以的,除非 chrome 错误地填充了输入,例如用电子邮件地址填充电话输入。客户对此有所抱怨,因此已证实它在多种情况下都会发生,而不是我在我的机器上本地完成的某种结果。
目前我能想到的唯一解决方案是动态生成自定义输入名称,然后在后端提取值,但这似乎是解决此问题的一种非常 hacky 的方法。是否有任何标签或怪癖会改变可用于解决此问题的自动填充行为?
原文由 templaedhel 发布,翻译遵循 CC BY-SA 4.0 许可协议
2022 年 4 月:
autocomplete="off"
在 Chrome 中仍然不起作用,我认为在查看与该问题相关的 Chromium 错误(可能仅适用于密码字段)后它永远不会起作用。我看到 2014 年 报告的问题以“WontFix”的形式关闭,而问题仍在讨论中 [1] [2] 。据我所知,Chromium 团队认为autocomplete="off"
没有有效的用例。https://bugs.chromium.org/p/chromium/issues/detail?id=914451#c66
他们的印象是网站不会正确使用它并决定不应用它,提出以下建议:
https://bugs.chromium.org/p/chromium/issues/detail?id=587466#c10
虽然这个“建议”目前对我有用,但它可能并不总是正确的,而且看起来团队正在进行实验,这意味着自动完成功能可能会在新版本中发生变化。
我们不得不诉诸于此是愚蠢的,但唯一可靠的方法是尽可能地尝试和混淆浏览器:
在不向浏览器泄露任何信息的情况下命名您的输入,即
id="field1"
而不是id="country"
。设置
autocomplete="do-not-autofill"
,基本上使用任何不会让浏览器将其识别为可自动填充字段的值。2021 年 1 月:
autocomplete="off"
现在确实按预期工作(在 Chrome 88 macOS 上测试)。为此,请确保将您的输入标签包含在表单标签中
2020 年 9 月:
autocomplete="chrome-off"
禁用 Chrome 自动填充。原始答案,2015 年:
对于新的 Chrome 版本,您只需在密码字段中
autocomplete="new-password"
即可。我已经检查过了,工作正常。在此讨论中从 Chrome 开发人员那里得到了提示: https ://bugs.chromium.org/p/chromium/issues/detail?id=370363#c7
PS 请注意,Chrome 将尝试根据名称、ID 和它可以在该字段周围获取的任何文本内容(包括标签和任意文本节点)推断自动填充行为。如果在上下文中有像
street-address
这样的自动完成标记,Chrome 将自动填充它。启发式可能会非常混乱,因为它有时只会在表单中有其他字段时触发,或者如果表单中的字段太少则不会触发。另请注意autocomplete="no"
似乎可以工作,但autocomplete="off"
不会因为历史原因。autocomplete="no"
你是在告诉浏览器这个字段应该作为一个名为"no"
的字段自动完成。如果您生成唯一的随机autocomplete
名称,您将禁用自动完成。如果您的用户访问了不良表单,他们的自动填充信息可能已 _损坏_。让他们手动进入并在 Chrome 中修复他们的自动填充信息可能是他们采取的必要行动。