7

解决浏览器保存密码自动填充问题

 2 years ago
source link: https://www.geekjc.com/post/5dd92180f0fdb84884a290c8
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

解决浏览器保存密码自动填充问题

时间: 11/23/2019作者: frontend-联合编辑浏览量: 762

1. 问题描述

话说有一天,我如往常一样打开我的开发网站进行登录操作。浏览器很平常的在我们进行登录操作之后询问我是否需要记住密码,懒惰如我点击了记住密码。一切都很正常的进行着,没有什么异常发生。然而,问题就出现了。当我打开一个新建用户的操作,里面的输入框自动将我的用户名和密码默认填写进去了,然后触发了内置的校验规则 Screen Shot 2019-11-23 at 7.51.32 PM.pngScreen Shot 2019-11-23 at 7.52.46 PM.png 在我确认过在打开编辑框的时候已经输入框的数据重置之后,开始了我的排查错位之旅。从cookie,本地缓存等等,都没有发现相关的问题。后来发现是浏览器存在自动填充机制的问题。

2. 浏览器自动填充机制

经过我的反复测试,以Chrome为例,当浏览器遇到type="text"与type="password"的input标签紧邻时,会触发浏览器自动填充行为。默认为黄色背景。firefox和360浏览器的处理方式是:只要检测到页面里有满足填充机制的,不管是不是display:none 的,只要检测到就直接往里填充。

2.1 解决方案

  1. 设置浏览器不提示记住密码,记住密码的网站都在设置里可以看到,并且可以去除(很明显,这个方法治标不治本,我就想记住密码还不行吗?) Screen Shot 2019-11-23 at 7.54.13 PM.png

  2. 使用HTML5新属性autocomplete="off" 但禁用自动填充。这个属性好像是firefox发起的,并不是标准属性,所以这块主要是针对ie和获取浏览器生效。谷歌不承认这个属性。所以在谷歌浏览器上并没有产生任何效果

  3. 既然浏览器遇到type="text"与type="password"的input标签紧邻时触发自动填充行为,则将两个input隔开,使用隐藏的方式“欺骗”浏览器,将密码信息填写在隐藏区域。

.is-hidden {
    position: absolute;
    left: -10000px;
    top: -10000px;
}
 /*让input看不见,而不是直接display: none,如果直接display: none,有些浏览器则不生效,比如谷歌*/

<input  type="text"  class="is-hidden" />
<input  type="password"  class="is-hidden" />

4.修改readonly属性

<input type="password" readonly onfocus="this.removeAttribute('readonly');"/>

将表单输入设为可读模式,浏览器自动填充就失效了,在焦点在该表单输入的时候再将可读属性移除。该方法亲试简洁好用

在以上介绍的方法并不是全部的解决方法,目前我用的是第四个方法比较多,虽然第三个方法也挺好用,但是多增加标签的类型不符合我的作风,还是默默的用了第四种方法.

关注下面的标签,发现更多相似的文章

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK