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


当前回答

这里提到的黑客在Chrome中没有一个对我有用。这里讨论了这个问题:https://code.google.com/p/chromium/issues/detail?id=468153#c41

将其添加到<form>中(至少目前如此):

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>

其他回答

截至2019年12月:

在回答这个问题之前,让我说,我在SO和不同论坛上尝试了几乎所有的答案,但没有找到适用于所有现代浏览器和IE11的解决方案。

这是我找到的解决方案,我相信这篇文章中还没有讨论或提及。

根据Mozilla开发网络(MDN)关于如何关闭表单自动完成的帖子

默认情况下,浏览器会记住用户通过网站上的字段提交的信息。这使浏览器能够提供自动补全(即,为用户已开始键入的字段建议可能的补全)或自动填充(即,在加载时预先填充某些字段)

在同一篇文章中,他们讨论了自动完成属性的用法及其限制。正如我们所知,并不是所有的浏览器都按照我们的意愿来尊重这个属性。

解决方案

所以在文章的最后,他们分享了一个适用于所有浏览器的解决方案,包括IE11+Edge。它基本上是一个jQuery插件。这里是jQuery插件的链接及其工作原理。

代码段:

$(document).ready(function () {        
    $('#frmLogin').disableAutoFill({
        passwordField: '.password'
    });
});

在HTML中需要注意的是,密码字段的类型为文本,并应用密码类来标识该字段:

<input id="Password" name="Password" type="text" class="form-control password">

希望这能对某人有所帮助。

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

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

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

只需每次将输入元素中的name属性更改为唯一的属性,它就不会再次自动完成!

一个例子可能是结尾处添加的时间tic。您的服务器只需要解析文本名称的第一部分即可检索回值。

<input type="password" name="password_{DateTime.Now.Ticks}" value="" />

Google Chrome忽略某些输入的autocomplete=“off”属性,包括密码输入和按名称检测的常见输入。

例如,如果您输入的是姓名地址,那么Chrome将根据其他网站上输入的地址提供自动填充建议,即使您告诉它不要这样做:

<input type="string" name="address" autocomplete="off">

如果您不希望Chrome这样做,那么可以重命名或命名表单字段的名称:

<input type="string" name="mysite_addr" autocomplete="off">

如果您不介意以前在站点上输入的自动完成值,那么可以保持启用自动完成。域名的名称间距应足以防止从其他站点记住的值出现。

<input type="string" name="mysite_addr" autocomplete="on">

(它在2021适用于Chrome(v88、89、90)、Firefox、Brave和Safari。)这里已经写过的旧答案将经过反复尝试,但大多数他们没有链接到任何官方文档或Chrome对此的评论课题

问题中提到的问题是因为Chrome的自动填充功能,这是Chrome在这个bug链接中的立场-问题468153:autocomplete=off在非登录INPUT元素上被忽略,注释160

简单地说,有两种情况-

[案例1]:您的输入类型不是密码。在这种情况下,解决方案很简单,有三个步骤。将name属性添加到输入name不应以电子邮件或用户名之类的值开头。否则Chrome仍然会显示下拉列表。例如,name=“emailToDelete”显示下拉列表,但name=“to delete email”不显示。这同样适用于autocomplete属性。添加autocomplete属性,并添加一个对您有意义的值,如新字段名

它将看起来像这样,并且在您的余生中不会再次看到该输入的自动填充-

  <input type="text/number/something-other-than-password" name="x-field-1" autocomplete="new-field-1" />

[案例2]:输入类型为密码好吧,在这种情况下,无论您的试用如何,Chrome都会向您显示管理密码/使用现有密码的下拉列表。Firefox也会做一些类似的事情,其他所有主要浏览器也是如此。2.在这种情况下,如果你真的想阻止用户看到下拉列表来管理密码/看到安全生成的密码,你就必须使用JS来切换输入类型,正如这个问题的其他答案中提到的那样。

2有关关闭自动完成的详细MDN文档-如何关闭表单自动完成