2011-08-22 106 views
0

当用户在某些站点上创建帐户时,它有时需要用户的基本信息,如姓名,电子邮件和位置。如果用户以前输入了他/她的信息,Chrome就可以自动填写此表单。当通过镀铬扩展自动填充时检测到

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

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

回答

1

你想要什么?很明显,每个表单都可以自动填充,因此对文本中的问题的答案是肯定的。

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

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

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

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

+0

对不起,标题非常糟糕。我甚至不确定自动填充是否是这里的正确术语(也许是预填表单)。当您创建需要基本信息的帐户时,您有时可以点击其中一个输入框来填写整个表单。通常情况下,表单不是自动填充的,这就是为什么我不能使用你提到的方法。我写了一个扩展名,要求我检测一个表单是否可以预先填充。 –

+0

我还是不明白:您对“表单可以自动填充”的特殊要求是什么,我的意思是,* ANY *表单可以自动填充?我意识到这个问题可能是你正在寻找的答案,但我已经指出:) –

+0

重新思考这个问题,也许你的意思是,当浏览器有一个以上的(登录)文本字段值时,它会留空,但是当您按下箭头键时会弹出一个对话框,您可以选择其中一个值。完成之后,浏览器也会填充密码字段,并且pw与您刚刚选择的登录字符串相匹配。 如果你想知道浏览器是否确实有这样的字段值,但是等待用户打开该下拉菜单,答案是:没有办法在页面的Javascript代码中检测到这个值。 –

1

好了,你可以检查的默认值value="VALUE"改变 即:

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

检查是否值发生了变化:

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

这两个中的一个应该帮助你(我希望:))

0

你可以使用

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

得到自动填充的所有元素。

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