我找到了这个问题的完整解决方案。 (我已经在 Chrome 27 和 Firefox 21 中对此进行了测试)。
有两件事需要知道:
- 触发“保存密码”,并且
- 恢复保存的用户名/密码
1. 触发“保存密码”:
For 火狐21,当检测到有包含输入文本字段和输入密码字段的表单提交时,会触发“保存密码”。所以我们只需要使用
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
ajax 登录并重新加载/重定向到登录页面event.preventDefault()
由于提交表单而阻止原始重定向。
如果您只使用 Firefox,上述解决方案就足够了,但在 Chrome 27 中不起作用。然后您会问如何在 Chrome 27 中触发“保存密码”。
For 铬27, '保存密码'被触发after通过提交包含输入文本字段的表单将其重定向到页面属性 name='用户名'和输入密码字段属性名称='密码'。因此,我们不能因为提交表单而阻止重定向,但我们可以在完成ajax登录后进行重定向。(如果您希望ajax登录不重新加载页面或不重定向到页面,不幸的是,我的解决方案不起作用。)然后,我们可以使用
<form id='loginForm' action='signedIn.xxx' method='post'>
<input type='text' name='username'>
<input type='password' name='password'>
<button id='loginButton' type='button'>Login</button>
</form>
<script>
$('#loginButton').click(someFunctionForLogin);
function someFunctionForLogin(){
if(/*ajax login success*/) {
$('#loginForm').submit();
}
else {
//do something to show login fail(e.g. display fail messages)
}
}
</script>
type='button' 的按钮将使表单在单击按钮时不会提交。
然后,将一个函数绑定到用于ajax登录的按钮。最后,调用$('#loginForm').submit();
重定向到登录页面。如果登录页面是当前页面,则可以将“signedIn.xxx”替换为当前页面来进行“刷新”。
现在,您会发现Chrome 27的方法在Firefox 21中也适用。所以最好使用它。
2. 恢复保存的用户名/密码:
如果您已经将登录表单硬编码为 HTML,那么您将发现恢复登录表单中保存的密码没有问题。
但是,如果使用js/jquery动态制作loginForm,则保存的用户名/密码不会绑定到loginForm,因为保存的用户名/密码仅在文档加载时绑定。
因此,您需要将登录表单硬编码为 HTML,并使用 js/jquery 动态移动/显示/隐藏登录表单。
Remark:如果你使用ajax登录,则不要添加autocomplete='off'
以标签形式,例如
<form id='loginForm' action='signedIn.xxx' autocomplete='off'>
autocomplete='off'
将使将用户名/密码恢复到登录表单失败,因为您不允许它“自动完成”用户名/密码。