vue实现禁止浏览器记住密码功能的示例代码


Posted in Vue.js onFebruary 03, 2021

查找资料

网上查到的一些方法:

  • 使用 autocomplete="off"(现代浏览器许多都不支持)
  • 使用 autocomplete="new-password"
  • 在真正的账号密码框之前增加相同 name 的 input 框
  • 使用 readonly 属性,在聚焦时移除该属性
  • 初始化 input 框的 type 属性为 text,聚焦时修改为 password
  • 使用 type="text",手动替换文本框内容为星号 “*” 或者 小圆点 “●”

实现过程

用到的字段

data() {
 return {
   username: '',
    password: '',
  }
}

由于 autocomplete="off" 现代浏览器已经不支持,所以直接放弃了对密码框设置,直接使用 autocomplete="new-password" ,亲测Chrome(v88.0.4324.104)、edge(v88.0.705.56)及火狐(v67)可用,但火狐(v85)还是会提示记住密码。

<el-input v-model="username" type="text" name="text" placeholder="账号" autocomplete="off"><i slot="prefix" class="el-input_icon el-icon-user"></i></el-input>

<el-input v-model="password" type="password" name="pwd" id="pwd" placeholder="密码" autocomplete="new-password"></el-input>

参考:

https://developer.mozilla.org/zh-CN/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#browser_compatibility

在解决火狐高版本提示的过程中,试验了3/4/5的方法,结果都不如人意,但发现火狐浏览器只要最终密码框里的值为星号 “*” 或者小圆点 “●” 时,就不会提示记住密码(不知是否正确,可自行测试),于是新增字段 pwdCover 用于关联输入框,实际传值用 password。

templete

<el-input v-model="username" type="text" name="text" placeholder="账号" autocomplete="off"><i slot="prefix" class="el-input_icon el-icon-user"></i></el-input>

<el-input v-model="pwdCover" type="password" name="pwd" id="pwd" placeholder="密码" autocomplete="new-password"@input="setPassword"></el-input>
script
data() {
 return {
   username: '',
    password: '',
    pwdCover: '',
  }
},
method: {
 login() {
   this.pwdCover = this.pwdCover.replace(/\S/g, '●');
    // 登录请求,失败时恢复pwdCover
    this.pwdCover = this.password;
  },
  setPassword(val) {
   this.password = val;
  }
}

自信满满发给了项目上的同事,结果翻车了,现场环境:

  • 操作系统:Windows7、Windows10
  • 浏览器:Chrome v74.0.3729.108

我安装同版本的谷歌浏览器之后发现问题还是没有出现,而我的操作系统是 Windows10,不知是哪里出了问题,最终还是选择了方法6

最终

templete

<el-form-item>
 <el-input v-model="username" type="text" name="text" placeholder="账号" autocomplete="off"><i slot="prefix" class="el-input_icon el-icon-user"></i></el-input>
</el-form-item>
<el-form-item>
 <el-input v-model="pwdCover" type="text" name="pwd" id="pwd" placeholder="密码" autocomplete="off" @input="setPassword"><i slot="prefix" class="el-icon-lock"></i></el-input>
</el-form-item>

script

setPassword(val) {
  let reg = /[0-9a-zA-Z]/g; // 只允许输入字母和数字
  let nDot = /[^●]/g; // 非圆点字符
  let index = -1; // 新输入的字符位置
  let lastChar = void 0; // 新输入的字符
  let realArr = this.password.split(''); // 真实密码数组
  let coverArr = val.split(''); // 文本框显示密码数组
  let coverLen = val.length; // 文本框字符串长度
  let realLen = this.password.length; // 真实密码长度
  // 找到新输入的字符及位置
  coverArr.forEach((el, idx) => {
    if(nDot.test(el)) {
      index = idx;
      lastChar = el;
    }
  });
  // 判断输入的字符是否符合规范,不符合的话去掉该字符
  if(lastChar && !reg.test(lastChar)) {
    coverArr.splice(index, 1);
    this.pwdCover = coverArr.join('');
    return;
  }
  if (realLen < coverLen) {
    // 新增字符
    realArr.splice(index, 0, lastChar);
  } else if (coverLen <= realLen && index !== -1) {
    // 替换字符(选取一个或多个字符直接替换)
    realArr.splice(index, realLen - (coverLen - 1), lastChar);
  } else {
    // 删除字符,因为 val 全是 ● ,没有办法匹配,不知道是从末尾还是中间删除的字符,删除了几个,不好对 password 处理,所以可以通过光标的位置和 val 的长度来判断
    let pos = document.getElementById('pwd').selectionEnd; // 获取光标位置
    realArr.splice(pos, realLen - coverLen);
  }
  // 将 pwdCover 替换成 ●
  this.pwdCover = val.replace(/\S/g, '●');
  this.password = realArr.join('');
},

到此这篇关于vue实现禁止浏览器记住密码功能的示例代码的文章就介绍到这了,更多相关vue 禁止浏览器记住密码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
vue3.0实现插件封装
Dec 14 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
vue+element ui实现锚点定位
Jun 29 Vue.js
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
vue整合百度地图显示指定地点信息
Apr 06 Vue.js
vue打包时去掉所有的console.log
Apr 10 Vue.js
vue 数字翻牌器动态加载数据
Apr 20 Vue.js
vue实现简易音乐播放器
Aug 14 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 #Vue.js
Vue常用API、高级API的相关总结
Feb 02 #Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 #Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 #Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 #Vue.js
vue-video-player 断点续播的实现
Feb 01 #Vue.js
Vite和Vue CLI的优劣
Jan 30 #Vue.js
You might like
php中get_magic_quotes_gpc()函数说明
2017/02/06 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
WEB前端实现裁剪上传图片功能
2016/10/17 Javascript
react路由配置方式详解
2017/08/07 Javascript
详解JS中的柯里化(currying)
2017/08/17 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
vue项目中使用bpmn为节点添加颜色的方法
2020/04/30 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
PyQT实现多窗口切换
2018/04/20 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
django迁移文件migrations的实现
2020/03/31 Python
python 穷举指定长度的密码例子
2020/04/02 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
pandas apply多线程实现代码
2020/08/17 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
聘任书的写作格式及范文
2014/03/29 职场文书
产品包装策划方案
2014/05/18 职场文书
计算机科学技术自荐信
2014/06/12 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
公司捐书倡议书
2015/04/27 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
Django操作cookie的实现
2021/05/26 Python
python自动计算图像数据集的RGB均值
2021/06/18 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript