如果用户真的点击了“记忆页面密码”(浏览器,而不是网站功能),浏览器记住用户和密码信息是正常的事情。
我有一个使用异步调用生成的登录表单,类似于:
$('#container').load('/path/file.php?what=login_form');
在这个表单中,当提交时,浏览器不会记住(并自动为我填写),即使我点击了‘是,记住密码’。
这是否意味着只会记住URLable页面表单?
编辑-输出示例
<div class="caja loginBox">
<form action="index.php" method="post" name="sesion" id="sesion">
<h1>Inicio de sesion</h1><h2>Usuario</h2>
<input type="text" id="nombre" name="nombre"/>
<h2>Password</h2><input type="password" id="pass" name="pass"/><button type="submit" name="inicio">Entrar</button>
</form> </div>
发布于 2012-02-25 16:28:14
我找到了一个适用于Firefox密码管理器的解决方案。根据您动态加载表单的原因,我的解决方案可能对您有帮助,也可能没有帮助。(更多信息见下文。)
首先,在页面上放置一个不可见的表单(我使用了内联样式"display:none"),该表单使用相同的方法和操作,并包含具有相同名称的字段。你可以把它放在最终包含真实表单的div下面:
<div id="container"></div>
<div id="fake-form" style="display: none">
<form action="index.php" method="post">
<input type="text" name='nombre' class='nombre'/>
<input type="password" name='pass' class='pass' />
</form>
</div>
然后,在JavaScript中,在加载了真实表单的内容之后,将值从假表单复制出来,并将它们放入真实表单中:
<script type="text/javascript">
$(function() {
$("#container").load("/path/file.php?what=login_form", function() {
var fakeForm = $("#fake-form");
$("#nombre").val(fakeForm.find(".nombre").val());
$("#pass").val(fakeForm.find(".pass").val());
});
});
</script>
也就是说,如果在动态加载实际表单之前,您正在经历如此多的工作来将表单放在页面上,那么为什么不直接删除最后一步,将表单放在页面上呢?:-)大概您有一个很好的理由这样做。也许来自服务器的表单具有唯一的样式信息,或者字段旁边的动态错误消息,或者i18n字段名称?
但是,如果您从服务器拉取的表单具有随不同用户而异的操作,那么我的技巧将不起作用,因为您必须在构建隐藏表单时提前知道该操作。
如果是这样的话,也许你可以反向尝试我的技巧,隐藏你从服务器加载的“真实表单”,并向用户显示假表单。假表单可以发布到一个不存在的网址,但是您可以使用JavaScript拦截“假表单”的onsubmit,将用户名和密码复制到看不见的“真实表单”中,在真实表单上调用提交,然后返回false以阻止原始表单提交。
更新:经过进一步考虑,我认为我的第二个解决方案不会奏效,因为密码管理器几乎肯定会将用户名和密码与您实际提交数据的最终相关联,而不是将表单中的初始操作URL与您最初只是假装提交到的URL相关联。无论如何,希望我的第一个解决方案能够满足您正在做的事情。
https://stackoverflow.com/questions/9244165
复制相似问题