我有以下表格,通过AJAX(jQuery AJAX,如果有帮助)放在页面上:
<div id="login">
<iframe src="/api/core/authSystem/authUser.php" id="temp" name="temp" style="display:none"></iframe>
<form id="loginForm" target="temp" onSubmit="App.Auth.login(); return false;">
Email: <input type="text" name="email" id="email" onkeydown='if(event.keyCode == 13){ this.submit; }' /><br />
Password: <input type="password" name="password" id="password" onkeydown='if(event.keyCode == 13){ this.submit; }' /><br />
<div class="errorMsg" id="loginError"></div>
<div class="loginHelp l"><a href="#">Cant access your account?</a></div>
<input class="button rounded r" type="submit" id="loginButton" value="Log In" />
</form>
</div>
根据This Question中提出的建议,我添加了iframe并将其定位。但是,浏览器仍然不会提示用户保存密码。知道为什么吗?
编辑:我刚刚注意到Firefox会要求保存密码,但一旦返回登录页面,就不会将其放入表单中。
答案 0 :(得分:0)
您可以尝试“双提交”技术。
简而言之:首先提交取消它,但在成功验证后再次触发它,不要取消它。
更详细:
你需要像这样重写你的表格:
<form id="loginForm" onSubmit="return App.Auth.login();" method="POST" action="/back-redirector">
/back-redirector
只是重定向回相同的页面或主页面。我正在重定向到同一页面。
首次调用时,App.Auth.login()
函数必须return false
;如果第一次调用成功登录,则return true
必须letTheLoginFormDoTheSubmit = false;
// flag to show that login was successful
// and we need to trigger password save prompt.
login: function() {
if (letTheLoginFormDoTheSubmit) {
return true;
}
// Do the login
// Start ajax
ajax(login, password, function() {
// This function is called when AJAX has completed
if (loginIsGood) {
letTheLoginFormDoTheSubmit = true;
loginForm.submit(); // trigger submit again
});
return false;
}
。
像这样:
{{1}}
那会发生什么?
表单正在提交给只重定向浏览器的URL,并且不做任何工作。
一些警告:
但总的来说,这并不是对登录过程的重大改变,应该在每个浏览器中触发密码保存提示。