如何在主要浏览器中禁用特定输入(或表单字段)的自动完成?
当前回答
添加autocomplete=“off”不会使其停止。
将输入类型属性更改为type=“search”。谷歌不会对搜索类型的输入应用自动填充。
其他回答
我们确实在一个网站上使用了sasb的想法。
这是一个运行医生办公室的医疗软件网络应用程序。然而,我们的许多客户都是外科医生,他们使用了许多不同的工作站,包括半公共终端。因此,他们希望确保一个不了解自动保存密码含义或不注意的医生不会意外地将登录信息轻易地留下。
当然,这是在Internet Explorer 8、Firefox 3.1等开始出现私人浏览的想法之前出现的。即便如此,许多医生还是被迫在医院使用老式浏览器,而这些浏览器的IT功能不会改变。
因此,我们让登录页面生成仅适用于该帖子的随机域名。是的,这不太方便,但这只是在打击用户不在公共终端上存储登录信息。
自动填充功能在不选择字段的情况下更改值。我们可以在状态管理中使用它来忽略选择事件之前的状态更改。
React中的一个示例:
import React, {Component} from 'react';
class NoAutoFillInput extends Component{
constructor() {
super();
this.state = {
locked: true
}
}
onChange(event){
if (!this.state.locked){
this.props.onChange(event.target.value);
}
}
render() {
let props = {...this.props, ...{onChange: this.onChange.bind(this)}, ...{onSelect: () => this.setState({locked: false})}};
return <input {...props}/>;
}
}
export default NoAutoFillInput;
如果浏览器尝试填充字段,则元素仍被锁定,状态不受影响。现在,您可以用NoAutoFillInput组件替换输入字段,以防止自动填充:
<div className="form-group row">
<div className="col-sm-2">
<NoAutoFillInput type="text" name="myUserName" className="form-control" placeholder="Username" value={this.state.userName} onChange={value => this.setState({userName: value})}/>
</div>
<div className="col-sm-2">
<NoAutoFillInput type="password" name="myPassword" className="form-control" placeholder="Password" value={this.state.password} onChange={value => this.setState({password: value})}/>
</div>
</div>
当然,这个想法也可以用于其他JavaScript框架。
对于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"/>
在尝试了所有解决方案之后(有些解决方案部分奏效,禁用自动填充但不自动完成,有些根本不奏效),我找到了截至2020年的最佳解决方案,将type=“search”和autocomplete=“off”添加到输入元素中。这样地:
<input type="search" /> or <input type="search" autocomplete="off" />
还要确保表单元素具有autocomplete=“off”。这非常有效,并禁用自动完成和自动填充。
此外,如果您使用type=“email”或任何其他文本类型,则需要添加autocomplete=“new email”,这将完全禁用两者。type=“password”也是如此。只需将“new-”前缀与类型一起添加到自动完成中即可。这样地:
<input type="email" autocomplete="new-email" />
<input type="password" autocomplete="new-password" />
浏览器忽略只读字段上的自动删除。这段代码使所有可写字段在聚焦之前都是只读的。
$(_=>{$('form[autocomplete=off][name]:not([readonly])').map((i,t)=>$(t).prop('autocomplete',t.type=='密码'?'新密码':'ope').prop;})<script src=“https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js“></script><form method=“post”autocomplete=“off”><input name=“user”id=“user”required class=“表单控件”/><label class=“form label”for=“user”>新用户</label><小时><input type=“password”name=“pass”id=“pass“minlength=”8“maxlength=“20”/><label class=“form label”for=“pass”>新Passwort</label></form>