避免 el-input 密码自动填充的实用方法

避免 el-input 密码自动填充的实用方法

在开发 Web 应用时,通常需要避免浏览器自动填充密码。以下是一些可行的解决方案,特别针对使用 Element UI 框架的 el-input 组件。

方法 1:设置随机的 nameautocomplete 属性

浏览器根据 name 属性来识别输入字段的类型,因此可以使用随机的 name 属性,并将 autocomplete 设置为 new-password

实现

html 复制代码
<el-input
  type="password"
  :name="randomName"
  autocomplete="new-password"
  v-model="password">
</el-input>
javascript 复制代码
export default {
  data() {
    return {
      password: '',
      randomName: `password_${Math.random().toString(36).substr(2, 9)}`
    };
  }
}

方法 2:使用隐藏的密码输入字段

通过在页面中添加一个隐藏的输入字段,可以避免自动填充密码字段。

实现

html 复制代码
<el-input
  type="text"
  style="display: none;"
  autocomplete="username">
</el-input>
<el-input
  type="password"
  autocomplete="new-password"
  v-model="password">
</el-input>

方法 3:使用 meta 标签阻止密码管理器

在 HTML 中添加以下 meta 标签,可能会阻止某些密码管理器的自动填充功能。

实现

html 复制代码
<meta name="disable-autofill" content="on">

方法 4:事件拦截

通过监听输入事件,可以在获取焦点时手动清除输入字段的内容。

实现

javascript 复制代码
methods: {
  clearInput(event) {
    event.target.value = '';
  }
}
html 复制代码
<el-input
  type="password"
  autocomplete="new-password"
  @focus="clearInput"
  v-model="password">
</el-input>

方法 5:动态改变 readonly 属性

通过设置 readonly 属性为true,可以避免一开始自动填充,在 mousedown 或 focus 事件触发时设置为 false ,允许输入

实现

javascript 复制代码
          <el-input
            placeholder="密码"
            type="password"
            v-model="loginForm.userPwd"
            show-password
            @focus="passwordMousedownFun"
            @input="passwordInputFun"
            @mousedown.native="passwordMousedownFun"
            :readonly="passwordReadonly"
            id="passwordRef"
          >

      loginForm: {
        userName: "",
        userPwd: "",
        userRember: false,
      },

      passwordReadonly: true,

  watch: {
    loginForm: {
      handler: function (newValue, oldValue) {
        if (newValue.userPwd == "") {
          this.passwordReadonly = true;
          setTimeout(() => {
            this.passwordReadonly = false;
          }, 0);
        }
      },
      deep: true,
    },
  },


    passwordMousedownFun() {
      if (this.loginForm.userPwd === "") {
        this.passwordReadonly = true;
      } else {
        if (this.loginForm.userPwd == this.originPwd) {
          this.loginForm.userPwd = "";
        }
      }
      setTimeout(() => {
        this.passwordReadonly = false;
      }, 0);
    },
相关推荐
泯泷6 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree6 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
Mr数据杨6 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
里欧跑得慢7 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢7 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
IT毕设实战小研7 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
苏灿烤鱼8 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
泯泷8 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
泯泷8 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法
泯泷8 小时前
手搓JSVM第 6 篇:把 IR 编成字节码:emit 与 label fixup
前端·javascript·算法