【问题标题】:How to trigger saved password autofill in browsers?如何在浏览器中触发保存的密码自动填充?
【发布时间】:2011-02-06 22:25:36
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript browser autofill


    【解决方案1】:

    除了将表单元素包装在form 元素中之外,请确保所有输入(甚至可能是表单)都具有不变的唯一nameid 属性。该名称可能应该是描述性的,例如密码等的password,不确定浏览器使用此信息的程度,但如果您使用标准名称,“自动建议”/“魔术棒”功能可能会更好。

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

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

    最简单的解决方案(如果静态表单有效)是在注销时强制重新加载页面(无论如何,您可能确实想在注销后丢弃正在运行的 javascript 的“状态”,所以刷新确实是一件好事)

    【讨论】:

    • 您可以随时在页面上显示您的登录表单,并且在文档准备好之前将其隐藏起来......
    • 在注销时重新加载页面确实可以在 Safari 和 Chrome 中使用自动填充功能。不过,Firefox 可能需要一个静态登录页面,而我一直在努力避免。
    【解决方案2】:

    一些浏览器需要“form”标签来启用本地用户名和密码存储。在 AJAX 应用程序中遇到了同样的问题,就我而言,我只是添加了

    <form>...</form>
    

    标签。

    【讨论】:

      【解决方案3】:

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

      要让“密码”出现在可见表单中,我认为您可以测量 iframe 表单中密码的长度,然后用相同数量的 * 填充可见表单的密码字段。

      【讨论】:

        猜你喜欢
        • 2019-12-30
        • 2011-11-05
        • 2011-04-01
        • 2011-06-23
        • 2014-11-07
        • 2016-02-09
        相关资源
        最近更新 更多