嘿,我正在开发一个具有登录对话框的Web应用程序,其工作方式如下:
用户点击"登录"
登录表单HTML使用AJAX加载并显示在页面上的DIV中
用户输入用户/传递字段并单击提交.它不是- 用户/通过AJAX提交
如果用户/通行证没问题,则页面会在用户登录时重新加载.
如果用户/传递不好,页面不会重新加载,但DIV中会出现错误消息,用户可以再次尝试.
这是问题所在:浏览器从不提供通常的"保存此密码?是/从不/不立即"提示它为其他网站提供的.
我尝试使用"autocomplete ='on'" 包装 是否可以让浏览器提供存储密码而无需重新修改我的登录流程? 谢谢Eric ps添加到我的问题,我肯定使用存储密码的浏览器,我从来没有点击"永远不会这个网站"...这是一个技术问题,浏览器没有检测到它是一个登录表单,而不是操作员错误:-) 我找到了这个问题的完整解决方案.(我在Chrome 27和Firefox 21中对此进行了测试). 有两件事需要知道: 触发'保存密码',然后 恢复保存的用户名/密码 对于Firefox 21,当检测到包含输入文本字段的表单并且提交了输入密码字段时,将触发"保存密码".所以我们只需要使用 如果你只处理Firefox,上面的解决方案已经足够了,但它在Chrome 27中不起作用.然后你会问如何在Chrome 27中触发"保存密码". 对于Chrome 27,通过提交包含带有属性名称='用户名'的输入文本字段和带有属性名称='密码'的输入密码字段的表单,将重定向到页面后触发"保存密码".因此,我们无法阻止由于提交表单而导致的重定向,但我们可以在完成ajax登录后进行重定向.(如果您希望ajax登录不重新加载页面或不重定向到页面,不幸的是,我的解决方案不起作用.)然后,我们可以使用 按下type ='button'将使单击按钮时不提交表单.然后,将函数绑定到ajax登录按钮.最后,调用 现在,您会发现Chrome 27的方法也适用于Firefox 21.因此最好使用它. 如果您已经将loginForm硬编码为HTML,那么您将发现在loginForm中恢复保存的密码没有问题. 备注:
如果您执行ajax登录,请不要添加 由于此表单没有提交按钮且没有操作字段,因此浏览器不会提供保存密码. 但是,如果您将按钮更改为 使用此方法,浏览器应提供保存密码. 这是两种方法中使用的Javascript: 我一直在努力解决这个问题,最后我能够找到问题以及导致失败的原因. 这一切都源于我的登录表单被动态注入页面(使用backbone.js).只要我将登录表单直接嵌入到我的index.html文件中,一切就像魅力一样. 我认为这是因为浏览器必须知道有一个现有的登录表单,但由于我的动态注入页面,它不知道"真正的"登录表单曾经存在过. 这个解决方案适用于我,由Eric发布在编码论坛上 它没有提示它的原因是因为浏览器需要页面以phyiscally方式刷新回服务器.您可以做的一个小技巧是使用表单执行两个操作.第一个动作是onsubmit让它调用你的Ajax代码.还有表单目标隐藏的iframe. 码: 诀窍在于停止表单提交自己的方式(event.stopPropagation()),而是发送自己的代码($ .ajax())并在ajax的成功回调中再次提交表单,以便浏览器捕获它并显示请求密码保存.您还可以添加一些错误处理程序等. 希望它对某人有所帮助. 我尝试了spetson的答案,但这对我来说不适用于Chrome 18.我的工作是为iframe添加一个加载处理程序而不是中断提交(jQuery 1.7): HTML: getSessions()执行AJAX调用,如果失败则显示loginForm div.(如果未对用户进行身份验证,则Web服务将返回403). 测试也适用于FF和IE8.标签,但这没有任何区别.
1> Timespace7..:
1.触发'保存密码':
$('#loginButton').click(someFunctionForLogin);
$('#loginForm').submit(function(event){event.preventDefault();});
someFunctionForLogin()
ajax登录并重新加载/重定向到登录页面,同时event.preventDefault()
由于提交表单而阻止原始重定向.$('#loginForm').submit();
重定向到登录页面.如果登录页面是当前页面,则可以用当前页面替换"signedIn.xxx"以进行"刷新".2.恢复保存的用户名/密码:
但是,如果使用js/jquery动态生成loginForm,则保存的用户名/密码将不会绑定到loginForm,因为保存的用户名/密码仅在文档加载时绑定.
因此,您需要将loginForm硬编码为HTML并使用js/jquery动态地移动/显示/隐藏loginForm.
autocomplete='off'
标签形式
使用提交按钮登录:
type="submit"
并处理提交,则浏览器将提供保存密码.
function login(f){
var username = f.username.value;
var password = f.password.value;
/* Make your validation and ajax magic here. */
return false; //or the form will post your data to login.php
}
我不明白,为什么这个答案如此赞成?
3> TK421..:
4> 小智..:
这实际上是一个HTTP获取`login.php?username = username&password = password`,这首先取消了保存密码的全部目的
6> w00t..:function getSessions() {
$.getJSON("sessions", function (data, textStatus) {
// Do stuff
}).error(function () { $('#loginForm').fadeIn(); });
}
$('form', '#loginForm').submit(function (e) {
$('#loginForm').fadeOut();
});
$('#loginframe').on('load', getSessions);
getSessions();
Please log in
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有