最近在作項目表單部分,發現選擇chrome記住密碼後,不但點擊記住密碼的頁面表單,整個項目的表單都被影響,後屢次反覆試用,發現了幾條規律,在此記錄並給你們看看,若是有問題或者有須要補充的,請留言,我隨時改。3qjavascript
規則一html
記住的密碼,不清緩存,就不會消失,即使改變了 主表單--被記住的表單 的屬性,此域名下的其餘表單依然會顯示--多發生在開發階段,發現修改了屬性,記住的密碼和用戶名依然顯示。java
規則二ajax
先name,後id,有name就按name顯示,不然按照id顯示,顯示的時候(包括本身以及其餘同類型input)也按照這個規則,尤爲是其餘同name 或同id 甚至既同name又同id的input先取相同name 的記住值,後取相同id 的記住值chrome
如被記住的input爲
<input type="text" name="user1" id="user1" >
<input type="text" name="user2" id="user2" >瀏覽器
現其餘頁面有input以下:
<input type="text" name="user1" id="user2" > //顯示的是上面第一個,既name 爲 user1, id 爲user1 的input記住值
<input type="text" name="user2" id="user1" > //顯示的是上面第二個,既name 爲 user2, id 爲user2 的input記住值 緩存
規則三安全
關於type=password 的input,當chrome發現跳轉的下一個頁面有type=password的時候,是不會彈出 記住密碼 彈窗的,因此這裏的跳轉地址很重要,跳轉的下個頁面有password 的input的話,chrome不會彈窗,跳轉的下個頁面沒有的話,就會彈出 --- 此種狀況只有在form表單提交,且action中填寫的只是靜態html,並無請求接口的時候會這樣。另外password 的輸入框內容是共享的,共享管理密碼中被記住的當前站點下的密碼。不受name與id的影響this
規則四firefox
type=password 的 DOM 上面最近的input(type爲 text或者email居多,若是上面是隱藏域,即使隱藏域中有默認值,也會依次往上查找)默認被chrome認爲是password 的user名被保存下來,在 chrome 設置中的 管理密碼 彈窗上能夠一目瞭然的看清楚,記住密碼的原理是按照 域名 + user + password 的形式記住的
規則五
即使主表單是被記住的,若是主表單沒有name 或id,後期依然不能顯示,然而被記住的密碼在其餘同站點下表單同類型的input會顯示
如 主表單 index.html 即使只有user 沒有name 和id ,password框有name,也會如此
<input type="text" placeholder="user"> //記住後不顯示
<input type="Password" name="psd" placeholder="Password"> //記住後不顯示
附表單 password.html
<input type="password" name="passworpooo" id="r" class="form-control" placeholder="456446">//記住後顯示
規則六
開發過程當中會遇到的坑,是記住密碼後。再改代碼,依然發現記住的密碼顯示,因而覺得修改的代碼是有效或無效的,其實記住的是以前的,因此每次修改代碼,須要清空全部緩存及記住的密碼,好比 主表單 中 user的input 的類型email, name 爲 user,輸入內容提交表單記住密碼後,再刪掉name或者修改name,使其不爲user,當加載到 email 的input 而且 name=user 的時候,雙擊,依然顯示以前記住的內容
規則七
類型不相同的表單域,只要name 或者id 與之相同,依然會顯示
如:主表單 index.html
<input type="email" name="user" placeholder="Email">
<input type="text" name="user1231" placeholder="user">
<input type="Password" name="psw1231" placeholder="Password">
附表單 email.html
<input type="text" name="user"> //顯示
<input type="email" name="user" id="Email2">//顯示
<input type="email" id="user">//顯示
當主表單被記住後, email.html 中第一個input雙擊後,依然顯示了主表單記住的內容
由於 email類型的輸入框是h5中新加入成員,強烈懷疑,本質實際上是text,只不過爲了開發方便,區分開來的,在作郵箱類型驗證的時候能派上用場,此處待查
規則八
記住密碼與其餘輸入域不一樣,沒有彈窗選擇記住密碼,輸入域依然會記住曾經輸入的內容,而記住密碼不一樣,是不會顯示的
規則九--摘抄網上一段處理方式
如何禁用Chrome谷歌瀏覽器自動保存密碼的提示?
在網頁開發中,在表單中加入autocomplete="off"後,IE和FF不會提示保存密碼,可是用Chrome瀏覽器登陸系統時,會彈出自動保存密碼的提示,從安全的角度考慮,須要禁止瀏覽器的這個功能,提高系統安全性。
大部分瀏覽器都是根據表單域的type="password"來判斷密碼域的,因此針對這種狀況能夠採起「動態設置密碼域」的方法:
複製代碼 代碼以下:
<input type="text" name="password" onfocus="this.type='password'" autocomplete="off"/>
解釋:當這個文檔框獲取焦點時纔將其變成密碼域。
實測該方法簡單有效,能夠禁用Chrome瀏覽器提示保存密碼的提示框。
注意,onfocus="this.type='password'"不能再IE上識別,須要作兼容性考慮,在網頁初始化的時候處理下就行了,對於IE瀏覽器,在input標籤上使用用type="password" autocomplete="off"後,瀏覽器是不會提示記住密碼的。
將autocomplete="off"屬性放入表單form中時,firefox 依然顯示彈窗詢問是否記住密碼,然而即使記住了,依然在表單中不顯示,不然記住的信息會默認填充在表單中,即使刷新仍然無效
而chrome的處理方式 爲只限制其餘輸入域的內容不顯示,記住密碼彈窗正常彈出,記住密碼的兩個關鍵輸入域---被chrome記住的user和password,也依然會默認顯示在輸入框中
但很顯然 <input type="text" name="password" onfocus="this.type='password'" autocomplete="off"/>這句話是有效的,由於當前表單中沒有type=password 的輸入框,chrome是不會彈窗顯示提醒記住密碼的
疑問:本身新建的demo中,除非使用input type=submit 或 button 或使用 $("form").submit() 總之,必定要表單提交,纔會彈出彈窗提示記住密碼,使用<a href="javascript:;" class="button">submit</a>
僞提交,完成ajax傳輸數據後跳轉頁面,是不會彈窗提示記住密碼的,然而公司的項目也是使用了a標籤,好奇怪,後天回公司看下
答案:無論是form表單提交仍是ajax(無論是否登陸成功),都會彈出 記住密碼