解决chrome 浏览器记住密码问题

最近有这个需求,不让浏览器记住密码(提示保存密码)
在网上查了好多解决方案,但都行不通
我也很绝望。。
只要显示这个小钥匙,不管你怎么处理,都会提示你保存密码

image.png

静下心来慢慢调试,发现chrome记住密码的一些规则
以下为服务器打开页面的情况

  1. 非服务器不会提示保存密码
  2. input 值每次变动,浏览器都会查找界面内是否存在“type=password” 且是否有值,有就会显示“钥匙”
  3. 通过js 延迟赋值不会触发

解决方法一:
通过监听input的输入,时时清空然后赋值
缺点: 输入框会时时闪动

 <div id="app">
    用户名: <input type="password" name="uname" id="uname"><br>
    密码:<input type="password" name="pwd" id="pwd">
  </div>
  <script>
    function getEl(id) {
      return document.querySelector(`#${id}`)
    }
    let pwd = getEl('pwd')

    function change(e){
      let val = e.value
      e.value = ''
      setTimeout(()=>{
        e.value = val
      }, 0)
    }
  </script>

方法二:
如果用户输完用户名在输密码是没问题的。
但是用户发现用户名错了,去更改用户名,这时浏览器就会触发“小钥匙”

<div id="app">
    用户名:
    <input type="text" name="uname" id="uname" oninput="changText(this)">
    <br>
    密码:
    <input type="password" name="pwd" id="pwd" oninput="changePwd(this)">
  </div>
  <script>
    function getEl(id) {
      return document.querySelector(`#${id}`)
    }
    let uname = getEl('uname')
    let pwd = getEl('pwd')

    function changText(e){
      changePwd()
    }

    function changePwd(e){
      if (!e) {
        let val = pwd.value
        pwd.value = ''
        setTimeout(()=>{
          pwd.value = val
        }, 0)
      } else {
        changText()
        let val = e.value
        e.value = ''
        setTimeout(()=>{
          e.value = val
        }, 0)
      }
    }
  </script>

方法三:
针对多个input type=password 设置密码的

<div id="app">
    用户名:
    <input type="text" name="uname" id="uname" oninput="changText(this)">
    <br>
    密码:
    <input type="password" name="pwd" id="pwd" oninput="changePwd(this)">
  </div>
  <script>
    function getEl(id) {
      return document.querySelector(`#${id}`)
    }
    let uname = getEl('uname')
    let pwd = getEl('pwd')

    function changText(e){
      if (!e) {
        let val = uname.value
        uname.value = ''
        setTimeout(()=>{
          uname.value = val
        }, 0)
      } else {
        changePwd()
        let val = e.value
        e.value = ''
        setTimeout(()=>{
          e.value = val
        }, 0)
      }
    }

    function changePwd(e){
      if (!e) {
        let val = pwd.value
        pwd.value = ''
        setTimeout(()=>{
          pwd.value = val
        }, 0)
      } else {
        changText()
        let val = e.value
        e.value = ''
        setTimeout(()=>{
          e.value = val
        }, 0)
      }
    }
  </script>

有更好的方案,请指出,共同学习。。。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,588评论 1 45
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,801评论 0 10
  • 时间如水,生命如歌,在这2016年最后的时光里,很高兴,能与我们南京十点读书的小伙伴们欢聚在一起,分享过去一年的收...
    金陵雨儿阅读 304评论 1 7
  • 2018.06.12 星期二 黄岛 晴 这几天勋回家,由我暂时负责市区的渠道几天,真实的感觉管理是门大学问,不仅是...
    Beyourself_5ce7阅读 298评论 0 1
  • 我叫文惠,自小就聪明,琴棋书画样样精通,被誉京中第一才女,家父文行是尚书府大人,娘就是世人口中的蚕丝娘娘...
    奈何一笑很倾城_9676阅读 423评论 0 0