html - 禁用 Chrome 自动填充

我在几个表单上遇到了 chrome 自动填充行为的问题。

表单中的字段都有非常常用且准确的名称,例如“email”、“name”或“password”,并且还设置了autocomplete="off"

自动完成标志已成功禁用自动完成行为,在您开始输入时会出现下拉值,但并未更改 Chrome 自动填充字段的值。

除了 chrome 错误地填充输入(例如用电子邮件地址填充电话输入)之外,这种行为是可以的。客户对此提出了投诉,因此已证实它在多种情况下都会发生,而不是作为我在我的机器上本地完成的某事的某种结果。

我能想到的唯一当前解决方案是动态生成自定义输入名称,然后在后端提取值,但这似乎是解决这个问题的一种非常老套的方法。是否有任何标签或怪癖可以改变可用于解决此问题的自动填充行为?

最佳答案

2022 年 4 月: autocomplete="off" 仍然无法在 Chrome 中运行,而且在查看与问题(可能仅适用于密码字段)。我看到 2014 中报告的问题以“WontFix”的形式关闭,问题仍在讨论中[1] [2] .根据我的收集,Chromium 团队认为 autocomplete="off" 没有有效的用例。

Overall, I still believe that neither of the extreme strategies ("always honor autocomplete=off" and "never honor autocomplete=off") are good.

https://bugs.chromium.org/p/chromium/issues/detail?id=914451#c66

他们认为网站不会正确使用它并决定不应用它,建议以下建议:

In cases where you want to disable autofill, our suggestion is to utilize the autocomplete attribute to give semantic meaning to your fields. If we encounter an autocomplete attribute that we don't recognize, we won't try and fill it.

As an example, if you have an address input field in your CRM tool that you don't want Chrome to Autofill, you can give it semantic meaning that makes sense relative to what you're asking for: e.g. autocomplete="new-user-street-address". If Chrome encounters that, it won't try and autofill the field.

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

附:请注意,Chrome 将尝试从名称、ID 和它可以在字段周围获取的任何文本内容(包括标签和任意文本节点)推断自动填充行为。如果上下文中有像 street-address 这样的自动完成标记,Chrome 会自动填充它。启发式可能会非常令人困惑,因为它有时仅在表单中有其他字段时才会触发,或者如果表单中的字段太少则不会触发。另请注意,autocomplete="no" 似乎可以工作,但 autocomplete="off" 由于历史原因不会。 autocomplete="no" 是在告诉浏览器该字段应该自动完成为一个名为 "no" 的字段。如果您生成唯一的随机 autocomplete 名称,则会禁用自动完成。

如果您的用户访问了错误的表单,他们的自动填充信息可能损坏。让他们手动进入并在 Chrome 中修复其自动填充信息可能是他们采取的必要措施。

https://stackoverflow.com/questions/15738259/

相关文章:

html - 我可以编写一个 CSS 选择器来选择没有特定类或属性的元素吗?

html - CSS 背景不透明度

html - 如何使 "position: absolute"元素居中

html - 确定用户的时区

c# - 如何使用 HTML 敏捷包

javascript - 从父页面调用 iframe 中的 JavaScript 代码

html - 名称为 ='' 的无效表单控件不可聚焦

javascript - 从文本 JavaScript 中剥离 HTML

javascript - 使用 jQuery 获取元素的类列表

javascript - 如何播放音频?