如何关闭表单自动完成

本文介绍如何在网站上禁用表单字段的自动完成功能。

了解自动完成和自动填充

默认情况下,浏览器会记住用户通过 <input> 字段提交到网站的信息。这使得浏览器能够提供自动完成功能(即,建议用户开始输入的字段的可能完成)或自动填充功能(即,在加载时预先填充某些字段)。

这些功能通常默认启用,但它们可能对用户构成隐私问题,因此浏览器可以允许用户禁用它们。但是,某些在表单中提交的数据除了当前交互之外没有用处(例如,一次性 PIN),或者包含敏感信息(例如,唯一的政府标识符或信用卡安全码)。作为网站作者,你可能希望浏览器不要记住此类字段的值,即使启用了浏览器的自动完成功能。

注意: WCAG 2.1 成功准则 1.3.5:标识输入目的 不要求自动完成或自动填充功能必须正常工作;它只要求与特定个人用户相关联的表单字段在程序上可识别。这意味着即使在关闭了表单本身的自动完成功能时,也可以通过(将相关的 autocomplete 属性添加到各个表单字段)来满足该准则。

禁用自动完成

要禁用表单中的自动完成功能,可以将 autocomplete 属性设置为 "off"

autocomplete="off"

可以对整个表单或对表单中的特定输入元素执行此操作

html
<form method="post" action="/form" autocomplete="off"></form>
html
<form method="post" action="/form"><div>
    <label for="cc">Credit card:</label>
    <input type="text" id="cc" name="cc" autocomplete="off" />
  </div>
</form>

在字段上设置 autocomplete="off" 会产生两种影响

  • 它告诉浏览器不要保存用户输入的数据,以便稍后在类似的表单上自动完成,尽管浏览器遵守的启发式方法各不相同。
  • 它会阻止浏览器在会话历史记录中缓存表单数据。当表单数据在会话历史记录中缓存时,如果用户提交了表单并单击“后退”按钮返回原始表单页面,则会显示用户填写的信息。

如果浏览器在将自动完成设置为关闭后仍然继续进行建议,则需要更改 <input> 元素的 name 属性。

管理登录字段的自动填充

现代浏览器实现了集成的密码管理:当用户为某个网站输入用户名和密码时,浏览器会提供将其记住以供用户使用。当用户再次访问该网站时,浏览器会使用存储的值自动填充登录字段。

此外,浏览器还允许用户选择主密码,浏览器将使用该主密码来加密存储的登录详细信息。

即使没有主密码,浏览器内密码管理通常也被视为安全上的净收益。由于用户不必记住浏览器为其存储的密码,因此他们可以选择比平时更强的密码。

出于这个原因,许多现代浏览器不支持 autocomplete="off" 用于登录字段

  • 如果某个网站在 <form> 元素上设置了 autocomplete="off",并且该表单包含用户名和密码输入字段,浏览器仍会提供记住此登录的选项。如果用户同意,浏览器将在用户下次访问页面时自动填充这些字段。
  • 如果某个网站为用户名和密码 <input> 字段设置了 autocomplete="off",浏览器仍会提供记住此登录的选项。如果用户同意,浏览器将在用户下次访问页面时自动填充这些字段。

如果你正在定义一个用户管理页面,用户可以在该页面上为其他人指定新的密码,因此,你希望阻止自动填充密码字段,可以使用 autocomplete="new-password"

此属性是对浏览器的提示;有些浏览器可能不遵守它。