前言
在chorme浏览器中,若浏览器保存了网页的用户名密码,当点击密码输入框时,会展示如下下拉提示框:
通过观察发现,当input输入框中type=‘password’时,会显示此下拉框,这是浏览器阵队密码框的友好提示。
需求要求把此下拉框隐藏不显示,参考众多方法,逐一尝试,接下来介绍三种解决此问题的方法:
第一种
为了友好操作,保存可以明文也可以加密展示用户名和密码的功能,代码如下:
Template:
<el-form-item label="密码" prop="userPassword"> <el-input v-model="formData.userPassword" auto-complete="new-password" class="userPassword" type="text" placeholder="请输入由大小写字母、数字、特殊符号三种以上组合的8至16位密码" @input="changeInputValue()"> <i :class="changeShowIcon" slot="suffix" @click="changeShow"></i> </el-input> </el-form-item>
JS:
data() { return { changeShowIcon: 'el-icon-view', // 明文展示和以*号展示密码时输入框最右侧图标样式 aflag: true, // 是否加密展示 formData: { savePassword: '' } // 初始化保存明文的字段 } } // 改变输入框最右侧图标样式,改变展示给用户输入框的内容为明文或加密 changeShow() { this.aflag = !this.aflag if (this.aflag === true) { // 加密 this.formData.userPassword = this.formData.userPassword.replace( /./g, '*' ) // 输入框内容全部变为* this.changeShowIcon = 'el-icon-view' } else { // 明文 this.formData.userPassword = this.formData.savePassword this.changeShowIcon = 'el-icon-circle-close' } }, changeInputValue() { const value = this.formData.userPassword // 输入的时候获取输入框的值 this.formData.savePassword += value.substr(value.length - 1, 1) // 获取最后一个字符加到到str,因为除了最后一个字符,其他的已经为* if (this.aflag === true) { this.formData.userPassword = value.replace(/./g, '*') } // 当加密展示时输入框内容全部变为* }
显示结果:
当以明文展示密码时:
获得的数据:
测出bug:
当在输入时,删除修改输入的字符,则保存的明文字段会出错。
bug示例:
经测试,此方法兼容IE,暂时未想到处理此bug方法,暂时保存这个思路。
第二种
思路为为初始化页面时,input输入框设置type为text,当点击右侧图标时,可以将type的值设为password。
代码如下:
Template:
<el-form-item label="密码" prop="userPassword"> <el-input v-model="formData.userPassword" auto-complete="new-password" class="userPassword" :type="userPasswordType" placeholder="请输入由大小写字母、数字、特殊符号三种以上组合的8至16位密码"> <i :class="changeShowIcon" slot="suffix" @click="changeShow"></i> </el-input> </el-form-item>
JS:
data() {
return {
userPasswordType: 'text', // 设置输入框的类型
changeShowIcon: 'el-icon-view', //输入框图标样式
aflag: true, // 是否明文展示
}
}
changeShow() {
this.aflag = !this.aflag
if (this.aflag === true) {
// 明文展示
this.userPasswordType = 'text'
this.changeShowIcon = 'el-icon-view' // 输入框内容全部变为*
} else {
// 加密展示
this.userPasswordType = 'password'
this.changeShowIcon = 'el-icon-circle-close'
}
}
明文时:
加密时:
测出bug:
这种方法只是处理了一开始进入页面时展示的弹出框,之后也会显示出来,暂时保留此思路。
第三种
参考多个解决方法,知道了chrome填充密码的原理是寻找name相同的password框进行填充,所以在不需要记住密码的页面放一个name跟登陆时相同的的input框就可以了,在密码框上方加一个和真正密码输入框同样name的input,并设置display:none ,或者通过定位功能让它看不见,这样浏览器的记住密码功能就失效了。
代码如下:
Template:
<input type="password" name="password" style="position: absolute;left: -10000px;"> <el-form-item label="密码" prop="userPassword"> <el-input v-model="formData.userPassword" auto-complete="off" show-password type="password" placeholder="请输入由大小写字母、数字、特殊符号三种以上组合的8至16位密码"> </el-input> </el-form-item>