Javascript 如何在浏览器中触发保存的密码自动填充?

Javascript 如何在浏览器中触发保存的密码自动填充?,javascript,browser,autofill,Javascript,Browser,Autofill,我有一个用纯JavaScript编写的web应用程序(除了加载所有JS文件的文档之外,没有预生成的HTML) 此应用程序包含在触发document.ready事件时动态创建的登录表单。在使用ajax登录之前,我通过将登录表单发布到一个隐藏的iframe(在Firefox中,密码显示在保存的密码列表中,因此这部分显然有效),诱使浏览器显示“记住密码?”对话框,但在稍后再次加载登录屏幕后,保存的密码永远不会被填写。Firefox和Safari中也发生了同样的事情 我可以做些什么或者调用一些函数来触发

我有一个用纯JavaScript编写的web应用程序(除了加载所有JS文件的文档之外,没有预生成的HTML)

此应用程序包含在触发document.ready事件时动态创建的登录表单。在使用ajax登录之前,我通过将登录表单发布到一个隐藏的iframe(在Firefox中,密码显示在保存的密码列表中,因此这部分显然有效),诱使浏览器显示“记住密码?”对话框,但在稍后再次加载登录屏幕后,保存的密码永远不会被填写。Firefox和Safari中也发生了同样的事情

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


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

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

要使“密码”显示在可见表单中,我认为您可以在iframe表单中测量密码的长度,然后用相同数量的*

填充可见表单的密码字段,一些浏览器需要“表单”标记来启用本地用户名和密码存储。在AJAX应用程序中也有同样的问题,在我的例子中,我刚刚添加了

<form>...</form>
。。。

标签。

除了将表单元素包装在
表单
元素中之外,还要确保所有输入(甚至表单)都具有唯一的
名称
id
属性,并且这些属性不会更改。名称可能应该是一些描述性的东西,如密码等的
密码
,不确定浏览器使用此信息的程度,但如果使用标准名称,“自动提示”/“魔杖”功能可能会更好

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

第三种可能性是,在脚本加载表单并将表单写入页面之前,某些浏览器可能会自动填充表单,尝试创建表单的静态html版本,看看是否有效


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

您可以始终将登录表单放在页面上,并将其隐藏,直到文档准备就绪。注销时重新加载页面确实可以使自动填充在Safari和Chrome中工作。不过,Firefox可能需要一个静态登录页面,这是我极力避免的。