如何在主要浏览器中禁用特定输入(或表单字段)的自动完成?
当前回答
这是浏览器现在忽略的安全问题。浏览器使用输入名称识别和存储内容,即使开发人员认为信息是敏感的,不应存储。
在两个请求之间设置不同的输入名称将解决问题(但仍将保存在浏览器的缓存中,并且还会增加浏览器的缓存)。
要求用户激活或停用浏览器设置中的选项不是一个好的解决方案。该问题可以在后端解决。
这是解决办法。所有自动完成的元素都是使用如下隐藏输入生成的:
<?php $r = md5(rand() . microtime(TRUE)); ?>
<form method="POST" action="./">
<input type="text" name="<?php echo $r; ?>" />
<input type="hidden" name="__autocomplete_fix_<?php echo $r; ?>" value="username" />
<input type="submit" name="submit" value="submit" />
</form>
然后,服务器像这样处理后置变量:(Demo)
foreach ($_POST as $key => $val) {
$newKey = preg_replace('~^__autocomplete_fix_~', '', $key, 1, $count);
if ($count) {
$_POST[$val] = $_POST[$newKey];
unset($_POST[$key], $_POST[$newKey]);
}
}
可以照常访问该值
echo $_POST['username'];
而且浏览器将无法从以前的请求或以前的用户那里建议信息。
即使浏览器更新其技术以忽略/尊重自动完成属性,这将继续有效。
其他回答
截至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;
}
请阅读本文了解更多详情。
这适用于Chrome 84.0.4147.105
1.为密码字段分配文本类型并添加类,例如“fakepasswordtype”
<input type="text" class="fakepasswordtype" name="password1">
<input type="text" class="fakepasswordtype" name="password2">
2.然后在第一次输入完成时,使用jQuery将类型改回密码
jQuery(document).ready(function($) {
$('.fakepasswordtype').on('input', function(e){
$(this).prop('type', 'password');
});
});
这阻止了Chrome在自动填充方面的丑陋行为。
<input autocomplete="off" aria-invalid="false" aria-haspopup="false" spellcheck="false" />
我发现它在所有浏览器上都适用。当我只使用自动完成时,它不起作用,除非我组合了您看到的所有属性。此外,我还从谷歌表单输入字段获得了解决方案
当我自己尝试时,事情已经改变了,旧的答案不再有效。
我确信它会奏效。我在Chrome、Edge和Firefox中测试了这一功能,它确实做到了这一点。你也可以尝试一下,告诉我们你的经历。
set the autocomplete attribute of the password input element to "new-password"
<form autocomplete="off">
....other element
<input type="password" autocomplete="new-password"/>
</form>
这是根据MDN
如果您正在定义一个用户管理页面,用户可以在该页面中为另一个人指定新密码,因此您希望防止自动填充密码字段,则可以使用autocomplete=“新密码”
这是一个提示,哪些浏览器不需要遵守。然而,由于这个原因,现代浏览器已经停止使用autocomplete=“new password”自动填充<input>元素。
推荐文章
- 使伸缩项目正确浮动
- 形式内联内的形式水平在twitter bootstrap?
- 自定义元素在HTML5中有效吗?
- 如何触发自动填充在谷歌Chrome?
- 创建圈div比使用图像更容易的方法?
- 为什么Chrome浏览器不正确地确定页面是在不同的语言,并提供翻译?
- 在网页上用鼠标模拟震颤(例如帕金森病)?
- Bootstrap抛出Uncaught错误:Bootstrap的JavaScript需要jQuery
- 如何改变文本区域的边框颜色:焦点
- 我如何设置背景颜色为文本的宽度,而不是整个元素的宽度,使用CSS?
- 如何删除和清除所有的本地存储数据
- 强制打开“另存为…”弹出打开文本链接点击PDF在HTML
- 如何修改标签文本?
- 在HTML中还有其他有用的空格码吗,比如半空格的 , em-spaces, en-spaces等等?
- 输入触发器按钮单击