如何在主要浏览器中禁用特定输入(或表单字段)的自动完成?
当前回答
大多数答案都没有帮助,因为浏览器只是忽略了它们。(其中一些不兼容跨浏览器)。对我有效的修复方法是:
<form autocomplete="off">
<input type="text" autocomplete="new-password" />
<input type="password" autocomplete="new-password" />
</form>
我在表单标签上设置autofill=“off”,在不需要自动填充的地方设置autofil=“new password”。
其他回答
始终有效的解决方案
我用随机字符解决了与谷歌Chrome的无休止斗争。当您总是使用随机字符串呈现自动完成时,它将永远不会记住任何内容。
<input name="name" type="text" autocomplete="rutjfkde">
希望这对其他人有所帮助。
2022年更新:
Chrome做出了这一改进:autocomplete=“新密码”,这将解决这个问题,但我不确定,如果一段时间后Chrome再次将其更改为不同的功能。
截至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">
希望这能对某人有所帮助。
很确定这是目前最通用的解决方案
这将停止自动完成和弹出的建议框。
简介
让我们面对现实,自动完成=关闭或新密码似乎不起作用。这是应该做的,但却没有,每周我们都会发现其他事情发生了变化,浏览器会用我们不想要的更多随机垃圾填写表单。我发现了一个非常简单的解决方案,它不需要在登录页面上自动完成。
如何实施
步骤1)。将相同的函数调用添加到用户名和密码字段的onmousedown和onkeyup属性,确保为它们提供一个id,并在函数调用结束时记录代码。md=mousedown和ku=keyup
对于用户名字段,仅添加值;因为这防止了表单在进入页面时自动填充。
例如:
<input type=“text”value=“ ;”id=“myusername”onmousedown=“protectMe(this,'md')”onkeyup=“protectMe(this,'ku')”/>
步骤2)。在页面上包含此功能
功能保护Me(el,action){//删除启动时注入的空白var v=el.value.trim();//如果我们正在键入内容,请忽略此重置过程//并且只在最后一次删除时确认按键//我们这样做会导致表单值为空如果(action=='ku'&&v!=''){return;}//修复了将outerHTML写回自身所导致的双引号问题(在表单输入中)v=v.replace(/“/g,'\\”');//通过重新编写表单,重置单击表单进入焦点时出现的弹出窗口el.outerHTML=el.outrHTML;//发出指令重新调整焦点,插入重置之前存在的值,然后选择内容。setTimeout(“var d=document.getElementById('“+el.id+”');d.value=\“”+v+“\”;d.focus();if(d.value.length>1){d.select();}”,100);}
它做什么?
首先,它添加了;字段的空格,以便浏览器尝试查找与此相关的详细信息,但未找到任何内容,因此自动完成固定其次,当您单击时,将再次创建HTML,取消弹出窗口,然后重新选择值。最后,当您使用delete按钮删除字符串时,弹出窗口通常会再次出现,但如果我们达到该点,则keyup检查会重复该过程。
问题是什么?
点击选择一个字符是一个问题,但对于登录页面,大多数人会原谅它选择了所有文本Javascript确实会删除任何空格的输入,但为了安全起见,您可能也希望在服务器端这样做
能更好吗?
可能是的。这只是我测试过的东西,它满足了我的基本需求,但可能还有更多的技巧需要添加,或者有更好的方法来应用所有这些。
已测试的浏览器
截至本发布日期,已在最新的Chrome、Firefox和Edge上测试和工作
我已经在这场永无止境的战斗中战斗了很久。。。所有的技巧和黑客最终都会停止工作,就像浏览器开发人员正在阅读这个问题一样。
我不想随机化域名,不想修改服务器端代码,不想使用JS重磅技巧,也不想将“黑客攻击”降至最低。下面是我想到的:
TL;DR使用完全没有名称或id的输入!并跟踪隐藏字段中的更改
<!-- input without the "name" or "id" -->
<input type="text" oninput="this.nextElementSibling.value=this.value">
<input type="hidden" name="email" id="email">
显然,可以在所有主要浏览器中使用。
P.S.已知的小问题:
您不能再通过id或名称引用此字段。但您可以使用CSS类。或者使用$(#email').prev();在jQuery中。或者想出另一个解决方案(有很多)。当以编程方式更改文本框值时,oninput和onchange事件不会触发。因此,相应地修改代码以反映隐藏字段中的更改。
Firefox 30忽略密码的autocomplete=“off”,而是选择提示用户密码是否应存储在客户端上。请注意2014年5月5日的以下评论:
密码管理器始终提示是否要保存密码。未经用户许可,密码不会保存。我们是继IE和Chrome之后第三个实现这一改变的浏览器。
根据Mozilla开发者网络文档,布尔表单元素属性autocomplete防止表单数据在旧浏览器中缓存。
<input type="text" name="foo" autocomplete="off" />
推荐文章
- 使伸缩项目正确浮动
- 形式内联内的形式水平在twitter bootstrap?
- 自定义元素在HTML5中有效吗?
- 如何触发自动填充在谷歌Chrome?
- 创建圈div比使用图像更容易的方法?
- 为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
- 在网页上用鼠标模拟震颤(例如帕金森病)?
- Bootstrap抛出Uncaught错误:Bootstrap的JavaScript需要jQuery
- 如何改变文本区域的边框颜色:焦点
- 我如何设置背景颜色为文本的宽度,而不是整个元素的宽度,使用CSS?
- 如何删除和清除所有的本地存储数据
- 强制打开“另存为…”弹出打开文本链接点击PDF在HTML
- 如何修改标签文本?
- 在HTML中还有其他有用的空格码吗,比如半空格的 , em-spaces, en-spaces等等?
- 输入触发器按钮单击