如何在主要浏览器中禁用特定输入(或表单字段)的自动完成?


当前回答

这是自2021 5月起适用于所有浏览器的完美解决方案!

TL;博士

将输入字段名和字段ID重命名为非相关的名称,如“data_input_field_1”。然后添加‌将字符插入标签的中间。这是一个非打印字符,因此您不会看到它,但它会诱使浏览器无法识别需要自动完成的字段,因此不会显示内置的自动完成小部件!

详细信息

几乎所有浏览器都使用字段的名称、id、占位符和标签的组合来确定字段是否属于一组地址字段,这些字段可以从自动完成中受益。因此,如果您有一个类似<input type=“text”id=“address”name=“street_address”>的字段,几乎所有浏览器都会将该字段解释为地址字段。因此,浏览器将显示其内置的自动完成小部件。梦想是使用属性autocomplete=“off”可以工作,不幸的是,现在大多数浏览器都不遵守请求。

因此,我们需要使用一些技巧来使浏览器不显示内置的自动完成小部件。我们这样做的方式是欺骗浏览器,使其相信该字段根本不是地址字段。

首先,将id和name属性重命名为不会泄露您正在处理的地址相关数据的属性。因此,与其使用<input type=“text”id=“city input”name=“city”>,不如使用类似的方式。浏览器不知道data_input_field_3代表什么。但你知道。

如果可能,不要使用占位符文本,因为大多数浏览器也会考虑到这一点。如果你必须使用占位符文本,那么你就必须发挥创意,确保你没有使用任何与地址参数本身相关的单词(如City)。使用类似“输入位置”的方法可以实现此目的。

最后一个参数是附加到字段的标签。然而,如果你像我一样,你可能希望保持标签完整,并向用户显示可识别的字段,如“地址”、“城市”、“州”、“国家”。好吧,好消息:你可以!实现这一点的最佳方法是插入零宽度非联接字符&#8204;,作为标签中的第二个字符。因此,将<label>City</label>替换为<label>C&#8204;城市</label>。这是一个非打印字符,因此您的用户将看到City,但浏览器将被欺骗,无法识别该字段!

任务完成!如果一切顺利,浏览器应该不再在这些字段上显示内置的地址自动完成小部件!

其他回答

为了解决这个问题,我使用了一些CSS技巧和以下工作。

input {
    text-security:disc;
    -webkit-text-security:disc;
    -mox-text-security:disc;
}

请阅读本文了解更多详情。

Firefox 30忽略密码的autocomplete=“off”,而是选择提示用户密码是否应存储在客户端上。请注意2014年5月5日的以下评论:

密码管理器始终提示是否要保存密码。未经用户许可,密码不会保存。我们是继IE和Chrome之后第三个实现这一改变的浏览器。

根据Mozilla开发者网络文档,布尔表单元素属性autocomplete防止表单数据在旧浏览器中缓存。

<input type="text" name="foo" autocomplete="off" />

Chrome计划支持这一点。

目前,最好的建议是使用很少自动完成的输入类型。

Chrome讨论

<input type='search' name="whatever" />

要与Firefox兼容,请使用normalautocomplete='off'

<input type='search' name="whatever" autocomplete='off' />

为字段使用非标准的名称和id,因此“name”不是“name_”。浏览器将不会将其视为名称字段。

最好的一点是,您可以对某些但不是所有字段执行此操作,并且它将自动完成某些但不是全部字段。

关于InternetExplorer11,有一个安全功能可以用来阻止自动完成。

它的工作原理如下:

用户输入后在JavaScript中修改的任何表单输入值都被标记为不符合自动完成的条件。

此功能通常用于保护用户免受恶意网站的攻击,这些网站在您输入密码或类似内容后想要更改密码。

但是,您可以在密码字符串的开头插入一个特殊字符来阻止自动完成。这个特殊字符可以被检测到,并在以后的管道中被删除。