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 上,此标志不存在!因此,在该平台上,您陷入困境!)至于答案是什么什么Google 使用了,我敢打赌它使用了类似于多功能框的意图,你可以在其中查看历史记录,但我不确定!问候,Mac