因為業務需求,在寫一個注冊頁面的時候,發現瀏覽器會自動填充此域名下已經保存的賬號密碼,給用戶帶來不便。加了HTML5 中的新屬性autocomplete="off" ,但是並沒有產生效果。 反復測試后發現瀏覽器自動填充機制是滿足:頁面里有一個type=password的input且這個input前面有一個type=text的input。的時候就會進行自動填充。
firefox和360瀏覽器的處理方式是:只要檢測到頁面里有滿足填充機制的,不管是不是display:none 的,只要檢測到就直接往里填充。而且是有幾個符合條件的就填充幾個。而chrome 54版本略有不同:滿足上面的條件且頁面里只有一個type=password 的input。才會自動給第一個type=text 的input填充賬號,給type=password 的input填充密碼。所以chrome 54版本不存在注冊頁面自動填充的問題。 Google出來的方法是修改input的type , 頁面里input都寫成type=text , 等獲得焦點的時候給改成type=password。下意識去搜了下IE下修改type,發現IE下type是個只讀屬性,修改type的方法並不能兼容IE。(網上說的 disableautocomplete 我試了下不能阻止360就沒再用。)
於是自己嘗試着寫了個方法,頁面里相應的input寫成type=text,當頁面加載好后,執行一個10毫秒的定時器,remove掉這些input,重新給頁面里添加type=password 的input 。相對應的事件都改成用on綁定。 firefox下自動填充的問題解決了,並且也兼容了IE,但是。。。360瀏覽器你什么時候添加他什么時候就給你填充!┻━┻︵╰(‵□′)╯︵┻━┻ ,這時候發現網易郵箱的輸入框是這么寫的 autocomplete="new-password" ,嘗試試了一下,竟然成功兼容360了!然后試了下 readonly ,寫在定時器里removeAttr 掉只讀屬性,也能阻止360瀏覽器自動填充。