为什么这个表单不会提示浏览器提供保存密码?

时间:2012-02-15 13:52:55

标签: html ajax forms browser

我有以下表格,通过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会要求保存密码,但一旦返回登录页面,就不会将其放入表单中。

1 个答案:

答案 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}}

那会发生什么?

  1. 第一次启动登录序列时调用login-function,并返回false以停止通常的表单提交。
  2. 登录功能接收数据,如果登录好,则将其保存在浏览器端,引发标记“一切正常,触发密码保存提示”并再次提交表单。
  3. 但由于旗帜飞行登录功能不再登录,只是让浏览器正常提交表格,这会触发密码保存提示。
  4. 表单正在提交给只重定向浏览器的URL,并且不做任何工作。

    一些警告:

    • 页面将被重新加载,因此在本地以某种方式保存您的身份验证cookie,或让重定向器知道它是什么,因此重定向器可以将其包含在重定向中。
    • 所有表单数据都可以通过第二次提交。为避免这种情况,请从表单中删除相关字段,或删除名称属性。
    • 服务器端需要重定向器。

    但总的来说,这并不是对登录过程的重大改变,应该在每个浏览器中触发密码保存提示。