Vue 项目 实现阻止浏览器记住密码功能

news2024/9/23 3:20:22

前言

通常浏览器会主动识别密码表单,在你登录成功之后提示保存密码 , 密码保存到浏览器的 密码管理器中 ( 如下是谷歌浏览器 )



这种行为是浏览器的行为 ,这种操作也是为了方便用户的使用

现在的一个需求是要阻止这个保存密码的弹窗提示 

实现方法

查找资料发现的一些方法:

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

可以看到实现这个需求有许许多多的方法,但是实际上确有各种各样的问题,下面是我自己测试的几个方法

方法一

密码框添加 autocomplete="new-password" 属性

index.html 文件添加 meta 元数据 (该步骤可以省略)

密码输入框

  <el-input
      prefix-icon="el-icon-lock"
      type="password"
      name="xxxx"
      placeholder="密码"
      v-model="password"
      autocomplete="new-password"
    >
  </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 ,这样浏览器就无法正确自动识别 密码

  • 给输入框绑定事件 , 每次输入数据触发事件, 把 密码 替换成 圆点 ●

  • 给输入框右侧 小眼睛手动绑定事件 ,控制密码的显示隐藏


具体代码

 <div class="login-location">
            <el-input
              prefix-icon="el-icon-lock"
              v-model="pwdCover"
              type="text"
              name="pwd"
              id="pwd"
              placeholder="密码"
              autocomplete="off"
              @input="setPassword"
              @keyup.enter.native="userLogin()"
            >
              <i
                slot="suffix"
                class="el-icon-view"
                style="margin-top: 10px; margin-right: 10px; font-size: 18px"
                @click="hidePassword"
              ></i>
            </el-input>
     </div>
 // 输入框输入事件
setPassword(val) {
      if (this.isShowPassword) {
        this.password = val;
      } else {
        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("");
      }
    },
     // 点击右侧小眼睛控制显示隐藏
    hidePassword() {
      if (!this.isShowPassword) {
        // console.log("显示");
        this.isShowPassword = true;
        this.pwdCover = this.password;
      } else {
        // console.log("隐藏");
        this.isShowPassword = false;
        this.pwdCover = this.pwdCover.replace(/\S/g, "●");
      }
    },
     // 登录的逻辑
      userLogin() {
      if (this.account === "admin" && this.password === "admin") {
        this.loading = true;
        setTimeout(() => {
          this.$router.push({ path: "/main" });
        }, 600);
        this.$message.success("登录成功");
      }
    }

注意

这种方法可以适配 谷歌浏览器 、 Edge 、 IE 浏览器

同时兼容 火狐浏览器

目前本地测试暂未发现问题


文章如有错误,恳请大家提出问题,本人不胜感激 。 不懂的地方可以评论,我都会 一 一 回复

文章对大家有帮助的话,希望大家能动手点赞鼓励,大家未来一起努力 长路漫漫,道阻且长

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么中国一有创新,就被说套壳?

今天来说点有意思的。 大家有没有发现一个现象&#xff1f;无论是2021年的鸿蒙系统&#xff0c;还是2023年的文心一言。每次中国科技有比较重大&#xff0c;具有独创性&#xff0c;且能吸引舆论关注的创新之后&#xff0c;似乎注定会出现一种言论&#xff1a;这东西啊&#xff…

redis缓存设计-Redis(七)

上篇文章介绍了redisCluster。 redis集群-Redis&#xff08;六&#xff09;https://blog.csdn.net/ke1ying/article/details/131217674 高并发缓存应对策略 缓存穿透 正常情况下&#xff0c;用户访问某条数据&#xff0c;第一次从数据库获取&#xff0c;后面会set进缓存&…

《Web应用技术》期末复习,更新中...

Web应用技术期末复习 一、MVCMVC概述&#xff1a; 二、Spring&#xff1a;Spring概述:&#xff08;1&#xff09;依赖注入&#xff08;Dependency Injection&#xff09;&#xff1a;&#xff08;2&#xff09;控制反转&#xff08;Inversion of Control&#xff09;&#xff1…

Win11下配置OpenCV with CUDA

前些天在B站上看到用OpenCV调用CUDA加速目标检测和关键点检测的教程&#xff0c;较Pytorch推理速度提升很明显&#xff0c;最近整了个RTX4070&#xff0c;所以就也想来试一试。由于刚换了电脑&#xff0c;没有相关环境&#xff0c;配置过程中踩了一些坑&#xff0c;因此有了这篇…

立创EDA:(1)AB32VG1开发板画PCB笔记

文章目录 1.准备原理图1.1 原理图参考资料1.2 我的原理图1.2.1 引脚分配1.2.2 电源电路1.2.3Type-c口和USB转串口CH340N1.2.4 三色灯&#xff0c;红外接收器&#xff0c;蓝牙天线1.2.5 ADC按键电路1.2.6 SD卡电路1.2.7 耳塞&#xff0c;麦克风&#xff0c;FM天线1.2.8 功放电路…

期末速成之插入排序(一)

文章目录 1.&#x1f349;排序1.1&#x1f348;插入排序1.1.1 &#x1f34c;插入排序 &#x1f34c;1.1.2 希尔排序 1.&#x1f349;排序 &#xff08;本质&#xff1a;进行一个筛选&#xff09; 排序在生活中的应用&#xff1a; 1.1&#x1f348;插入排序 1.1.1 &#x1f3…

AN13189-移植

AN13189.pdf 2简介 本文件提供了从软件角度将基于PN7160 NXP NCI的NFC控制器集成到Android平台的指南。 它首先解释了如何安装所需的内核驱动程序&#xff0c;然后逐步描述了如何调整Android开源项目源代码以添加PN7160 NFC控制器的支持。图1显示了整个Android NFC堆栈的架构。…

【程序】基于simulink车辆动力学可视化仿真

一、前言 车辆动力学是研究汽车在行驶过程中的运动学和力学特性的学科。它研究车辆在不同路面条件、不同驾驶情况下的加速、制动、转向等运动状态&#xff0c;并通过建立数学模型来分析和优化车辆的性能和安全性。车辆动力学是汽车工程、机械工程和物理学等学科的交叉领域&…

基于SpringBoot的SSM整合案例 -- SpringBoot快速入门保姆级教程(四)

文章目录 前言1.设计创建数据库表tbl_book2.创建新的SpringBoot模块&#xff0c;勾选相关依赖3. 添加SpringBoot创建项目时没有提供的相关坐标4.根据数据库表创建实体类Book5.编写dao层操作BookDao6.编写Service服务层接口BookService7.编写服务层实现类BookServiceImpl8.编写B…

AI催生电影新纪元?大咖们纷纷发声|瞩目上影节

AI催生电影新纪元&#xff1f;大咖们纷纷发声&#xff5c;瞩目上影节 听说“谁懂AI&#xff0c;谁股票就飙高”。博纳影业集团创始人兼总经理于冬一句话引得会场爆笑连连。 AI成为今年上海国际电影节热议话题之一。在金爵电影论坛开幕论坛上&#xff0c;于冬、中国电影股份有限…

keyclock==纯java实现第三方登录

官网Guides - Keycloak 下载 Downloads 18.0.0 - Keycloak GitHub: https://github.com/keycloak/keycloak/tags?after17.0.1 1-安装启动 参照readme文件 启动 bin\kc.bat start-dev 初始化超管账号密码admin admin 参考官方教程 OpenJDK - Keycloak 打开超管界面h…

Mac 上的搜狗输入法卡顿问题

我的 Mac 使用的中文输入法是搜狗拼音输入法&#xff0c;一直有一个问题&#xff0c;就是 Mac 开机太久&#xff0c;输入法会出现卡顿问题&#xff0c;按下按键 0.5s 后需才会显示对应的汉字&#xff0c;用着非常难受&#xff0c;以前这种情况我都是通过重启 Mac 来解决&#x…

Python算法练习6.18

leetcode 1431 拥有最多糖果的孩子 给你一个数组 candies 和一个整数 extraCandies &#xff0c;其中 candies[i] 代表第 i 个孩子拥有的糖果数目。 对每一个孩子&#xff0c;检查是否存在一种方案&#xff0c;将额外的 extraCandies 个糖果分配给孩子们之后&#xff0c;此孩…

全国大数据与计算智能挑战赛:面向低资源的命名实体识别基线方案,排名13/64,组织单位:国防科技大学系统工程学院(大数据与决策实验室)

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…

管理类联考——英语二——技巧篇——写作——B节——图表作文——必备词汇句型

图表作文必备词汇句型 1&#xff0e;该表格展示了…… The table reveals The table demonstrates The table shows The table depicts The tableillustrates The table presents The table describes 2&#xff0e;占…… Comprise Take up Account for Constitute C…

【MySQL】不就是索引

前言 嗨&#xff01;小伙伴们周末快乐呀&#xff01;想必你们周末都在家里边呆着吧&#xff0c;外面实在是太热了&#xff01;在家里吹着空调做着自己喜欢做的事情吧&#xff01;本期我们主要学习的是MySQL中的约束条件。 目录 前言 索引概述 外键约束 1.概念 2.语法 1.添加…

机器学习的学习准则(期望风险最小化、经验风险最小化、结构风险最小化)

训练集是有N个独立同分布的样本组成&#xff0c;即每个样本(x,y)是独立的从相同的分布中抽取的。这个真实的分布未知 输入空间X和输出空间Y构成样本空间&#xff0c;对于样本空间中的样本(x, y)∈X x Y&#xff0c;假定x和y之间可通过一个未知的真实隐射yg(x)来描述&#xff0…

九、提交代码自动触发Jenkins构建版本

提交代码自动触发Jenkins构建版本 1. 下载Generic Webhook Trigger 2. 配置Generic Webhook Trigger http://JENKINS_URL/generic-webhook-trigger/invoke?tokenruoyi-ui-8978456465 http://192.168.1.183:8080 为jenkisn地址&#xff0c;/generic-webhook-trigger/invoke?…

学习潘海东博士的《潮汐调和分析原理和应用》

潘海东博士在B站&#xff08;用户名&#xff1a;ocean_tide&#xff09;分享了他的电子书《潮汐调和分析原理和应用》&#xff0c;以及他开发的潮汐调和分析工具包S_Tide&#xff0c;非常厉害。 在学习《潮汐调和分析原理和应用》之前&#xff0c;我们需要安装matlab软件。 1 、…

阿里云免费服务器申请流程、领取入口、主机配置及限制条件

阿里云服务器免费试用申请链接入口 aliyunfuwuqi.com/go/free 阿里云个人用户和企业用户均可申请免费试用&#xff0c;最高可以免费使用3个小时&#xff0c;阿里云服务器网分享阿里云服务器免费试用申请入口链接及云服务器配置&#xff1a; 目录 阿里云服务器免费试用 企业…