我刚刚发现,如果您记得某个网站的用户名和密码,则当前版本的Chrome会将您的用户名/电子邮件地址自动填充到该字段之前的任何type=password
字段。它并不关心该字段的名称-只是假设该字段在密码将作为您的用户名之前使用。
旧解决方案
只需使用<form autocomplete="off">
它,它就可以根据浏览器可能做出的假设(通常是错误的)防止密码预填充以及任何形式的启发式填充。<input autocomplete="off">
与之相反,使用密码自动填充似乎忽略了这一点(在Chrome中,Firefox确实服从了它)。
更新的解决方案
Chrome现在忽略<form autocomplete="off">
。因此,我原来的解决方法(已删除)现在风靡一时。
只需创建几个字段,然后使用“ display:none”将其隐藏即可。例:
<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>
然后在下面放置您的真实字段。
记住要添加评论,否则团队中的其他人会想知道您在做什么!
2016年3月更新
刚刚使用最新的Chrome进行了测试-一切都很好。现在这是一个相当老的答案,但我想提一下,我们的团队已经在许多项目上使用了多年。尽管下面有一些评论,它仍然可以正常工作。可访问性没有问题,因为这些字段display:none
意味着它们不会成为焦点。正如我提到的,您需要将它们放在实际字段之前。
如果您使用javascript修改表单,则需要额外的技巧。在处理表单时显示假字段,然后在一毫秒后再次隐藏它们。
使用jQuery的示例代码(假设您为假字段提供了一个类):
$(".fake-autofill-fields").show();
// some DOM manipulation/ajax here
window.setTimeout(function () {
$(".fake-autofill-fields").hide();
},1);
2018年7月更新
由于Chrome的反可用性专家一直在努力工作,因此我的解决方案不再有效。但是他们以以下形式向我们扔了骨头:
<input type="password" name="whatever" autocomplete="new-password" />
这行得通,并且大部分可以解决问题。
但是,如果您没有密码字段,而只有一个电子邮件地址,则无法使用。也可能很难使它停止变黄并预填充。伪字段解决方案可用于解决此问题。
实际上,有时您需要放入两个假字段,然后在不同的地方尝试。例如,我在表单的开头已经有假字段,但是Chrome最近又开始重新填充“电子邮件”字段-因此,我加倍并在“电子邮件”字段之前放置了更多假字段,并对此进行了修复。删除第一批或第二批字段将还原为不正确的过度热情的自动填充。
2020年3月更新
目前尚不清楚该解决方案何时以及何时仍然有效。它有时似乎仍然有效,但并非始终如此。
在下面的评论中,您会找到一些提示。@anilyeni刚添加的一个可能值得进一步调查:
如我所知,autocomplete="off"
如果中的元素少于3个,则可在Chrome 80上使用<form>
。我不知道逻辑是什么,或有关它的相关文档在哪里。
@dubrox的这个也可能是相关的,尽管我没有测试过:
非常感谢您的窍门,但请更新答案,因为display:none;
它不再起作用,但position: fixed;top:-100px;left:-100px; width:5px;
:)
更新2020年4月
此属性的chrome特殊值正在执行此工作:(已在输入中测试-但不是由我测试)
autocomplete="chrome-off"