chrome 阻止浏览器在表单输入框聚焦/输入时显示保存的密码和账号候选框(Google 密码管理工具)

ops/2024/10/19 1:23:40/

参考:

完美解决 element-ui input=password 在浏览器会自动填充密码的问题

背景:

领导要求去掉登录页的账号密码表单的自动显示账号密码候选框

定位:

  1. chrome 版本 126.0.6478.127 , 现有表单用的是原生 input 元素, 之前已经加了 autocomplete="off"readonly + onfocus 时去掉 readonly , 看起来之前就尝试去掉候选框了, 但是没啥效果; 账号和密码输入框都会触发, 要不就是一开始不触发, 清空后重新输入 或 多次 tab 切换/点击重新获取焦点后又触发了
  2. 先看 autocomplete 属性, 结果发现 off 和 new-password 都不管用
  3. 之前记得看到过使用额外的隐藏 input 欺骗浏览器的方案, 但是不想改现有表单结构 + 多写代码, 先 pass ;
  4. 再试 readonly , 毕竟之前加的这个, 有时还是生效的, 于是搜到了上面的参考文章, 参考它成功解决问题 — 坑爹的是, 尝试过程中经常是本地 localhost 没问题, 发到测试环境域名后效果不好…

代码:

<!-- vue 写的 --><!-- 原代码 -->
<!-- 遍历配置表单输入框配置对象数组 inputConfig , 显示账号和密码输入框 -->
<input v-model="form[item.attrName]"ref="loginFormInput":type="item.type":name="item.name":id="item.id":placeholder="item.placeholder":autocomplete="item.type === 'password' ? 'on' : 'off'":readonly="item.type !== 'password'"onfocus="this.removeAttribute('readonly');"@blur="blur(item,form[item.val],index)"@focus="focus(index)"@change="change(form[item.val], item.val)"/><!-- 新代码 -->
<input v-model="form[item.val]"ref="loginFormInput":type="item.type":name="item.name":id="item.id":placeholder="item.placeholder"autocomplete="off" // 变动:readonly="true" // 变动// 删除 onfocus@blur="blur(item,form[item.val],index)" // 内部变动@focus="focus(index)" // 内部变动@mousedown="handleMouseDown(index)" // 新增@change="change(form[item.val], item.val)"/><script>export default {methods: {// 动态设置 input 的 readonly , 避免浏览器显示候选框handleMouseDown(index) {const $inputEl = this.$refs.loginFormInput[index];if (this.form[this.inputConfig[index].attrName] === '') {$inputEl.setAttribute('readonly', 'readonly');setTimeout(() => {$inputEl.removeAttribute('readonly');});} else {$inputEl.removeAttribute('readonly');}},focus(index) {// 新增的相关代码// 避免使用 tab 键选中输入框时浏览器显示候选框this.handleMouseDown(index);},blur(item, val, index) {// 新增的相关代码// 失焦时设置 readonly , 不管输入框是否有值, 避免多次 tab 切换输入框后浏览器候选框又显示出来了const $inputEl = this.$refs.loginFormInput[index];$inputEl.setAttribute('readonly', 'readonly');}},watch: {'form.password': {handler: function(val) {// 新增的相关代码// 此处使用 watch 值的变化,因为使用 @input 监听时用拼音输入有问题(可用 compositionstart 解决, 但麻烦)if (!val) {this.handleMouseDown(1);}},deep: true},'form.userName': {handler: function(val) {// 新增的相关代码// 此处使用 watch 值的变化,因为使用 @input 监听时用拼音输入有问题(可用 compositionstart 解决, 但麻烦)if (!val) {this.handleMouseDown(0);}},deep: true}}}
</script>

后记:

额… 领导说不用改了, 我理解错了, 说的不是去掉候选框, 是去掉候选框里某一条记录, 客户自己进密码管理器删了就行…


http://www.ppmy.cn/ops/126602.html

相关文章

文献阅读:通过深度神经网络联合建模多个切片构建3D整体生物体空间图谱

文献介绍 文献题目&#xff1a; 通过深度神经网络联合建模多个切片构建3D整体生物体空间图谱 研究团队&#xff1a; 杨灿&#xff08;香港科技大学&#xff09;、吴若昊&#xff08;香港科技大学&#xff09; 发表时间&#xff1a; 2023-10-19 发表期刊&#xff1a; Nature M…

业务逻辑漏洞之墨者学院靶场——身份认证失效

点击链接进去之后的页面如下&#xff1a; 让我们获取马春生的个人信息 查看页面源代码&#xff1a; 可以看到一堆以数字命名的图片&#xff0c;应该是一些重要信息&#xff0c;可以看到马春生对应的图片是20128880316.jpg 根据提示登录test用户后&#xff0c;页面发生变化&…

状态模式(C++)

定义&#xff1a;状态模式&#xff08;State Pattern&#xff09;是一种行为设计模式&#xff0c;它允许对象在内部状态改变时改变它的行为&#xff0c;对象看起来似乎修改了它的类。状态模式将状态相关的行为封装到单独的类中&#xff0c;并将这些对象组合成状态模式&#xff…

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度&#xff0c;天气状况&#xff1a;**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

Chromium html<img>对应c++接口定义

<img src"tulip.jpg" alt"上海鲜花港 - 郁金香" /> 1、html_tag_names.json5中接口定义&#xff1a; &#xff08;third_party\blink\renderer\core\html\html_tag_names.json5&#xff09; {name: "img",constructorNeedsCreateElementF…

MySQL—CRUD—进阶— (一) |ू・ω・` )

文本目录&#xff1a; ❄️一、数据库约束&#xff1a; ☑1、约束类型&#xff1a; 1&#xff09;、NULL 约束&#xff1a; 2&#xff09;、唯一约束&#xff1a; 3&#xff09;、默认约束&#xff1a; 4&#xff09;、主键约束&#xff1a; 5&#xff09;、外键约束&#xff…

linux命令之less用法

less 分屏上下翻页浏览文件内容 补充说明 less命令 的作用与more十分相似&#xff0c;都可以用来浏览文字档案的内容&#xff0c;不同的是less命令允许用户向前或向后浏览文件&#xff0c;而more命令只能向前浏览。用less命令显示文件时&#xff0c;用PageUp键向上翻页&…

巨日禄AI故事转漫画视频创作教程

【一】新建作品 添加剧本&#xff0c;从30多个画风中选择一个匹配文案的画风。如果拿不准可以参考样图。巨日禄可以一次性制作6000字&#xff0c;20分钟以上的视频。&#xff08;第一次限制了1000字&#xff0c;仅为新用户更完整体验整个流程&#xff09; 【二】选择画风 那文…