如何在主要浏览器中禁用特定输入(或表单字段)的自动完成?
当前回答
对于React,您可以尝试将此代码放在表单下面或密码输入上面,或者放在电子邮件和密码输入之间
export const HackRemoveBrowsersAutofill = () => (
<>
<input type="email" autoComplete="new-password" style={ { display: 'none' } } />
<input type="password" autoComplete="new-password" style={ { display: 'none' } } />
</>
)
示例之一:
<input type="email"/>
<HackRemoveBrowsersAutofill/>
<input type="password"/>
其他回答
我遇到了同样的问题,今天2019年10月9日,我找到的唯一解决方案是
将autocomplete=“off”添加到表单标记中。
打开表单标签后输入1个错误。
<input id="username" style="display:none" type="text" name="fakeusernameremembered">
但它在密码类型字段上不起作用,请尝试
<input type="text" oninput="turnOnPasswordStyle()" placeholder="Enter Password" name="password" id="password" required>
在脚本上
function turnOnPasswordStyle() {
$('#password').attr('type', "password");
}
这在Chrome-78、IE-44、Firefox-69上进行了测试
始终有效的解决方案
我用随机字符解决了与谷歌Chrome的无休止斗争。当您总是使用随机字符串呈现自动完成时,它将永远不会记住任何内容。
<input name="name" type="text" autocomplete="rutjfkde">
希望这对其他人有所帮助。
2022年更新:
Chrome做出了这一改进:autocomplete=“新密码”,这将解决这个问题,但我不确定,如果一段时间后Chrome再次将其更改为不同的功能。
将输入保留为文本类型并隐藏。在DOMContentLoaded上,调用一个函数来更改密码类型并显示字段,延迟1秒。
document.addEventListener('DOMContentLoaded',changeInputsType);函数更改InputsType(){setTimeout(函数){$(/*selector*/).prop(“type”,“password”).show();}, 1000);}
这适用于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在自动填充方面的丑陋行为。
不要使用JAVASCRIPT修复此问题!!
首先使用HTML解决此问题,以防浏览器未使用脚本、无法使用您的脚本版本或脚本已关闭。请始终在HTML之上最后一层脚本。
对于具有“text”类型属性的常规输入表单字段,请在元素上添加autocomplete=“off”。由于用户浏览器覆盖设置,这可能在现代HTML5浏览器中不起作用,但它会照顾到许多旧浏览器,并停止大多数浏览器中的自动完成下拉选项。注意,我还包括了所有其他可能会让用户感到不快的自动完成选项,如autocapitalize=“off”、autocorrect=“off”和spellcheck=“false”。许多浏览器不支持这些功能,但它们增加了额外的“附加”功能,这会让数据输入人员感到烦恼。注意,例如,如果用户的浏览器设置为启用了自动填充,Chrome会忽略“关闭”。因此,实现浏览器设置可以覆盖此属性。
例子:
<input type="text" id="myfield" name="myfield" size="20" value="" autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false" tabindex="0" placeholder="Enter something here..." title="Enter Something" aria-label="Something" required="required" aria-required="true" />
对于用户名和密码输入类型字段,对于触发“关闭”功能的更具体的自动完成属性,浏览器的支持有限。用于登录的文本输入上的autocomplete=“username”将迫使某些浏览器重置并删除自动完成功能。autocomplete=“new password”将尝试使用“password”类型输入字段对密码执行相同操作。(见下文)。然而,这些是特定浏览器的专有技术,在大多数情况下都会失败。不支持这些功能的浏览器包括Internet Explorer 1-11、许多Safari和Opera桌面浏览器,以及一些版本的iPhone和Android默认浏览器。但它们提供了额外的力量来尝试并强制删除自动完成。
例子:
<input type="text" id="username" name="username" size="20" value="" autocomplete="username" autocapitalize="off" autocorrect="off" spellcheck="false" tabindex="0" placeholder="Enter username here..." title="Enter Username" aria-label="Username" required="required" aria-required="true" />
<input type="password" id="password" name="password" size="20" minlength="8" maxlength="12" pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,12}" value="" autocomplete="new-password" autocapitalize="off" autocorrect="off" spellcheck="false" tabindex="0" placeholder="Enter password here..." title="Enter Password: (8-12) characters, must contain one number, one uppercase and lowercase letter" aria-label="Password" required="required" aria-required="true" />
现在寻找更好的解决方案!
由于标准机构和浏览器对HTML5的支持分散,许多现代HTML5属性在许多浏览器中都失败了。所以,一些孩子转向脚本来填补这些漏洞。但这是懒惰的编程。使用JavaScript隐藏或重写HTML会使情况变得更糟,因为您现在有一层又一层的脚本依赖关系,再加上HTML补丁。避免这种情况!
要在表单和字段中永久禁用此功能,最好的方法是每次在“input”元素上创建一个自定义的“id”/“name”值,使用一个唯一的值,如连接到字段id和name属性的日期或时间,并确保它们匹配(例如“name=password_{date}”)。
<input type="text" id="password_20211013" name="password_20211013" />
这破坏了愚蠢的浏览器自动完成选择算法,该算法会嗅探触发这些字段过去值的匹配名称。通过这样做,浏览器无法将以前表单数据的缓存与您的匹配。它将强制关闭“自动完成”,或显示空白列表,并且不再显示任何以前的密码!在服务器端,您可以创建这些自定义输入“命名”字段,并通过简单地解析id/name的第一部分,从用户浏览器的响应中识别和提取正确的字段。例如“password_”或“username_”等。当字段的“name”值出现时,只需解析第一部分(“password_{date}”)并忽略其余部分,然后在服务器上提取值。
容易的
推荐文章
- 编辑和重放XHR chrome/firefox等?
- 使用JavaScript显示/隐藏'div'
- 如何用CSS“裁剪”一个矩形图像成一个正方形?
- 使用JavaScript获取所选的选项文本
- AngularJS模板中的三元运算符
- HTML编码问题-显示“”字符而不是“ ”
- 嵌入YouTube视频-拒绝在帧中显示,因为它将“X-Frame-Options”设置为“SAMEORIGIN”
- 添加HTML到容器元素中,不包含innerHTML
- 如何使用jQuery添加' style=display:"block" '到一个元素?
- 在HTML中,我可以用✓做一个复选标记;. 有相应的x标记吗?
- 我可以将CSS样式应用于元素名称吗?
- 我怎么能发送一个内部<div>到它的父<div>底部?
- 改变引导输入焦点蓝色发光
- 我如何使一个div上的滚动条只在必要时可见?
- HTML5 iFrames的替代方案