Chrome 決定保存登入表單資料並在下次造訪時自動完成這些資料的啟發式是什麼?
如果 Chrome 沒有以特定表單儲存憑證,原因可能會是什麼?我知道:
- 使用者名稱和密碼字段一定有
autocomplete="on"
; - 表格一定有
method="POST"
。
從實驗上來說,這還不夠:我有一個登入頁面(私人的,抱歉,但程式碼要點如下),它滿足這兩個條件,而且憑證不會自動完成。
這是我的具體問題。我用另一種方式解決了這個問題(透過安裝自動填充並使其在表單上輸入我的憑證),但我仍然想知道為什麼 Chrome 不提供保存憑證。
網站(不是我寫的,也不能公開存取)需要使用者名稱和密碼。它使用相當標準的形式(在我不知情的情況下),看起來像這樣(我省略了很多嵌套<div>
和諸如此類的東西,並且此處顯示的屬性和函數fooXXX
由我重命名)。
<form name="aspnetForm" method="post" action="default.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="aspnetForm">
<table>
<tr>
<td>Username:</td>
<td><input name="foo$name" type="text" id="foo_name" tabindex="1" autocomplete="off" onkeyup="fooFunction()" style="width:175px;" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input name="foo@pass" type="password" id="foo_pass" tabindex="2" value="" autocomplete="off" style="width:175px;" /></td>
</tr>
</table>
</form>
我希望我的瀏覽器記住我訪問該網站的憑證。該功能已在瀏覽器中啟用,但網站有一些特殊之處,導致 Firefox 和 Chrome 都無法記住使用者名稱和密碼。
我編寫了一個使用者腳本(Firefox 中的 Greasemonkey 腳本,Chrome 中的解壓縮擴充功能)更改autocomplete="off"
為autocomplete="on"
:
document.querySelector("#foo_user").setAttribute("autocomplete", "on");
document.querySelector("#foo_pass").setAttribute("autocomplete", "on");
在 Firefox 中,這達到了預期的效果:Firefox 會記住密碼,下次我造訪登入頁面時,我的憑證會自動填入。
Chrome(27.0.1453.93,Linux)中沒有這樣的運氣。我沒有收到記住密碼的提示,也沒有獲得用戶名字段的歷史記錄。我已經確認該腳本是透過檢查input
元素來執行的,它們確實顯示了autocomplete="on"
。
我嘗試將這些行添加到我的用戶腳本中,但它們並沒有改善情況。
document.querySelector("#foo_user").removeAttribute("onkeyup");
document.querySelector("#foo_pass").removeAttribute("value");
Chrome 的啟發式方法與 Firefox 有何不同?
答案1
使用自動完成=打開擴大。
將網頁中的“autocomplete=off”更改為“autocomplete=on”,以便記住您的密碼。
答案2
我發現一個標誌似乎可以解決在尋找新標誌時自動完成的問題。在 chrome://flags 中,有一個名為「啟用登入偵測」的標誌。將其切換為“禁用”,它應該(至少在實驗被刪除之前)解決您的問題。 (在 iOS 版 Chrome 上,這個標誌不存在!所以,在那個平台上,你被卡住了!)至於答案是什麼什麼谷歌使用,我打賭它使用類似於多功能框的意圖,你可以在其中看到歷史記錄,但我不確定!問候,麥克