解决浏览器自动填充密码框的问题

本文介绍了三种防止浏览器自动填充密码的方法,并详细记录了每种方法的效果及适用情况。最终结合两种方法成功解决了问题。

今天解决了一个问题,就是万恶的浏览器自动填充密码(ps:在不恰当的地方做了 不恰当的事)

解决前的图片:


先声明一下:我使用的页面是ftl的静态页面。非html文件。

这里先不说废话,先说我搜到的3种方法(js清空值的那种方法不考虑,怕有延迟会造成先有值,然后消失的情况,不友好):

1.把input type=”password” 改成 input type=”text” 并在后面加上 onfocus="this.type='password'"

 <input type="text" name="pw" id="pw" required onfocus="this.type='password'" class="form-control"  />

2.在用户名和密码之间加上一个隐藏的文本框:

 <input type="text" name="counts" id="counts" required class="form-control"  />
 <input type="password" style="display: none"/>
 <input type="password" name="pw" id="pw" required class="form-control" />


3.使用html5的属性:

 <input type="text" name="counts" id="counts" required class="form-control"  autocomplete="off"/>
 <input type="password" name="pw" id="pw" required  class="form-control"  autocomplete="off" />

说一下我使用各种方法的情况:

在我解决这个问题的时候,文本框里面已经加入了html5的属性,但是没什么卵用,所以第三种方法在我这里不好用。

我试的一直是网上搜索到的使用的最多的解决方法,第2种,加一个隐藏的密码框,因为有说浏览器会给第一个type为password的文本框填充。然后如果这个框中没有id和name属性的话,浏览器是不会进行填充的。使用了以后,发现不隐藏的时候,谷歌浏览器还真不填充了。但是我已设置display属性,就不好用了。而且360浏览器是会给最后一个密码框赋值,不隐藏也不管用。

不过如果一直点击进入这个页面,过几次,这个属性就又管用了,没找到原因。

第一种方法:进入页面的时候,还真的没有填充,我以为好用了,先输入上面的文本框,然后输入密码,确实没问题。但是当我先点击密码的时候,悲剧发生了,自动填充又出来了。

最后的解决方法:(划重点了)
    当我把第二个方法和第三个方法合起来用的时候,问题解决了。
 <input type="text" name="counts" id="counts" required class="form-control"  autocomplete="off">
  <input type="password" style="display: none"/>
 <input type="text" name="pw" id="pw" required onfocus="this.type='password'" class="form-control"  autocomplete="off" >

解决后的图片:


最后:  第三个方法我没去掉,有兴趣的可以试试。

美中不足,当我焦点在password,会给出下面的提示,如果鼠标移动上去,还是会填充,鼠标移开后就消失了:


 欢迎讨论。。。

虽然给定的参考引用中未提及浏览器自动填充密码的逻辑原理,但一般而言,浏览器自动填充密码的逻辑原理如下: 当用户在网页的登录表单中输入用户名和密码并成功登录后,浏览器会询问用户是否要保存该密码。若用户选择保存,浏览器会将该网站的网址、用户名和密后的密码存储在本地数据库中。 当用户再次访问该网站,浏览器会识别出登录表单的输入框。通常通过HTML标签和属性来判断,比如 `<input type="password">` 标签代表密码输入框,`<input type="text">` 或 `<input type="email">` 可能代表用户名输入框。 浏览器会将当网站的网址与本地数据库中存储的网址进行匹配。若匹配成功,浏览器会从数据库中提取对应的用户名和密后的密码,对密码进行解密,然后自动填充到相应的输入框中。 在某些情况下,浏览器还会根据表单的结构和上下文信息来进一步确认是否进行填充。例如,如果表单有特定的ID或类名,且这些信息与之保存的表单特征相符,浏览器会更有把握地执行填充操作。 ### 代码示例(简单示意逻辑) ```javascript // 模拟本地存储的密码数据 const passwordStorage = { "example.com": { username: "user123", encryptedPassword: "encrypted123" } }; // 模拟解密函数 function decryptPassword(encryptedPassword) { // 实际的解密逻辑会更复杂 return encryptedPassword.replace("encrypted", "decrypted"); } // 模拟检测到登录表单 function detectLoginForm() { const currentUrl = window.location.hostname; const usernameInput = document.querySelector('input[type="text"], input[type="email"]'); const passwordInput = document.querySelector('input[type="password"]'); if (passwordStorage[currentUrl] && usernameInput && passwordInput) { const { username, encryptedPassword } = passwordStorage[currentUrl]; const decryptedPassword = decryptPassword(encryptedPassword); usernameInput.value = username; passwordInput.value = decryptedPassword; } } // 页面载完成后检测表单 window.addEventListener('load', detectLoginForm); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值