通常浏览器会主动识别密码表单,在你登录成功之后提示保存密码 , 密码保存到浏览器的 密码管理器中 ( 如下是谷歌浏览器 )
这种行为是浏览器的行为 ,这种操作也是为了方便用户的使用
现在的一个需求是要阻止这个保存密码的弹窗提示
登录页账户,密码框不要浏览器自动填充账户,密码
查找资料发现的一些方法:
- 使用 autocomplete=“off”(现代浏览器许多都不支持)
- 使用 autocomplete=“new-password”
- 在真正的账号密码框之前增加相同 name 的 input 框
- 使用 readonly 属性,在聚焦时移除该属性
- 初始化 input 框的 type 属性为 text,聚焦时修改为 password
- 使用 type=“text”,手动替换文本框内容为星号 “*” 或者 小圆点 “●”
下面是我在测试时使用的一些方法
方法一
密码框添加 autocomplete=“new-password” 属性
根 index.html 文件添加 meta 元数据 (该步骤可以省略)
<el-input v-model="loginForm.password" type="password"
autocomplete="new-password"
:placeholder="$t('Login.password')"
@keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
index.html文件(可忽略该步骤)
<!DOCTYPE html>
<html lang="">
<head>
.....
<meta name="autocomplete" content="off">
.......
</head>
......
<body>
........
</body>
</html>
注意
这种方法可以适配 谷歌浏览器 、 Edge 、 IE 浏览器
不兼容 火狐浏览器
方法二
新添加两个输入框 , type 分别设置为 text 和 password
设置 display: none 属性让其隐藏
代码
<div class="login-location">
<!-- 隐藏的输入框 -->
<el-input
style="display: none"
type="text"
name="xxxx"
autocomplete="off"
>
</el-input>
<el-input
style="display: none"
type="password"
name="xxxx"
autocomplete="off"
>
</el-input>
<!-- 真实输入框 -->
<el-input
ref="pass"
prefix-icon="el-icon-lock"
@keyup.enter.native="userLogin()"
v-model="password"
type="password"
placeholder="密码"
name="xxxx"
>
</el-input>
</div>
注意
这种方法可以适配 谷歌浏览器 、 Edge 、 IE 浏览器
不兼容 火狐浏览器
方法三
把密码框的 type 定义为 text ,这样浏览器就无法正确自动识别 密码
一,input的type改为text,然后修改样式
vue代码
<el-input v-model="loginForm.password"
type="text" class="no-autofill-pwd"
:placeholder="$t('Login.password')"
@keyup.enter.native="handleLogin">
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
</el-input>
css代码
.no-autofill-pwd {
/deep/ .el-input__inner {
-webkit-text-security: disc !important;
}
}
这样type为text的输入样式就会变成圆点