2010-04-12 257 views
9

我有一个用纯JavaScript编写的Web应用程序(除了加载所有JS文件的文档,没有预生成的HTML)。如何在浏览器中触发保存的密码自动填充?

此应用程序包含一个登录表单,它在触发document.ready事件事件时动态创建。我欺骗浏览器显示“记住密码?”在使用ajax登录之前将登录表单发布到隐藏的iframe中(在Firefox中,密码显示在已保存的密码列表中,所以这部分显然起作用),但在稍后再次加载登录屏幕后,保存的密码不会被填充时间。 Firefox和Safari也会发生同样的情况。

有什么我可以做的或我可以调用一些函数来触发自动填充?

更新:在初始页面加载时,自动填充在Safari中工作,但在用户注销并且没有页面重新加载时重新创建登录表单时不会自动填充。在Firefox中它永远不会工作。

回答

4

除了将表单元素包装在form元素中,请确保所有输入(甚至可能是表单)都具有不会更改的唯一nameid属性。这个名字应该是类似于password的密码等描述性内容,并不确定哪种程度的浏览器会使用此信息,但如果您使用标准名称,“autosuggest”/“magic wand”功能可能会更好。

当然,你应该确保你没有设置任何autosuggest/autofill属性为false(如果你使用的话,js框架可能会这样做是出于某种原因)。

第三种可能性是,一些浏览器也许你的脚本加载之前自动填充不和写形式的页面,请尝试以下形式的静态的HTML版本,看看是否作品。

最简单的解决方案(如果静态表单工作)是在注销时强制重新加载页面(您可能确实想在注销后放弃正在运行的JavaScript的“状态”,因此刷新实际上是一件好事)

+0

您可以随时在页面上显示登录表单,并隐藏到文档准备就绪。 – gnarf 2010-04-19 07:22:24

+0

在退出时重新加载页面确实可以在Safari和Chrome中自动填充。不过,Firefox可能需要一个我努力避免的静态登录页面。 – 2010-04-19 11:24:17

0

难道你不能使用类似的技巧 - 使用iframe加载表单,然后在提交登录表单时,实际上提交iframe表单,其中包含保存的密码。

为了让'密码'以可见的形式出现,我认为你可以在iframe窗体中测量密码的长度,然后用相同数量的*填充可见窗体的密码字段。

1

某些浏览器需要“form”标记才能启用本地用户名&密码存储。在AJAX应用程序中有相同的问题,在我的情况下,我刚刚添加

<form>...</form> 

标签。