【问题标题】:Detect when an autofill happens via chrome extension通过 chrome 扩展检测自动填充何时发生
【发布时间】:2011-11-01 12:42:43
【问题描述】:

当用户在某些网站上创建帐户时,有时需要用户的基本信息,例如姓名、电子邮件和位置。如果用户之前输入了他/她的信息,Chrome 可以自动填写此表单。

我的问题是:是否可以检测/识别用户正在访问的页面是否可以自动填充?

一个天真的解决方案是解析每个页面以查找可以自动填充的表单。但是有更优雅的解决方案吗?

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension autofill


    【解决方案1】:

    你到底想要什么?显然,每个表格都可以自动填写,因此您的文本中的问题的答案是肯定的。

    您的标题中的问题是一个非常不同的问题 - 表单是否已自动填写?

    有一个很好的近似值:如果您在加载时检查表单中是否有任何值(与您发送的值不同),并且存在,用户显然无法手动填写它们。那么你就知道自动填充已经发生了。

    另一方面,听起来好像您不是在为自己的网站寻找通用解决方案,而是为您自己想要编写的浏览器扩展程序寻找通用解决方案?在这种情况下,解决方案是相同的,在页面加载时立即查看页面提供的值,看看实际存在的值是否不同。我不确定,但 onload 事件应该没问题,我认为在页面加载之前不会发生自动填充。也许您甚至需要在 onload 事件之上添加几百毫秒。用户无论如何不能在一秒钟内输入太多内容,或者选择复选框等,所以它仍然是一个很好的猜测。

    无论如何,即使在重新阅读了您的标题和您的问题之后,我实际上对您想要实现的目标更加困惑 - 但由于道格拉斯·亚当斯不是第一个尝试教我们的人,通常这不是答案但问题本身就是问题:)

    【讨论】:

    • 对不起,标题很糟糕。我什至不确定自动填充是否是正确的术语(可能是预填表格)。当您创建需要基本信息的帐户时,您有时可以单击其中一个输入框来填写整个表格。通常表格不会自动填写,这就是为什么我不能使用你提到的方法。我正在编写一个扩展程序,要求我检测是否“可以”预填表单。
    • 我还是不明白:您对“表格可以自动填充”的特殊要求是什么,我的意思是,ANY 表格毕竟可以自动填充?我意识到这个问题可能是您正在寻找的答案,但我已经指出了这一点:)
    • 重新思考这个问题,也许你的意思是,当浏览器的(登录)文本字段有多个值时,它会将其留空,但是当你按下向下箭头时,会有一个弹出窗口,你可以选择其中一个值。完成后,浏览器还会使用与您刚刚选择的登录字符串匹配的密码填写密码字段。如果您想查明浏览器是否确实有某个字段的此类值,但要等待用户打开该弹出菜单,答案是:无法从页面的 Javascript 代码中检测到这一点。
    【解决方案2】:

    好吧,你可以检查一下默认值value="VALUE"已经改变了 即:

    if (getElementById('inputID').value != 'VALUE') { // DO SOMETHING }

    检查值是否改变:

    input type="text" onchange="alert('changed')">

    这两个应该可以帮助你(我希望:))

    【讨论】:

      【解决方案3】:

      你可以使用

      document.querySelectorAll('*:-webkit-autofill');
      

      自动填充所有元素。

      然后你只需要检查循环中是否有任何新元素。

      【讨论】:

        猜你喜欢
        • 2012-04-02
        • 2011-12-01
        • 2017-01-05
        • 1970-01-01
        • 2020-06-25
        • 2014-01-20
        • 2017-07-02
        • 2018-04-19
        • 2018-02-02
        相关资源
        最近更新 更多