许多网站的登录页面为了提升用户体验,都在页面加载完成后让用户名那个input自动获取焦点。就连struts的html:form标签也考虑到了这一点,提供了一个focus的属性。
Gmail, Delicious都是这么做的。它们一般是hook页面的onload事件,调用input元素的focus方法。但是在网速较慢的情况下,onload可能会在表单显示之后好久才触发,而该事件触发前,用户可能已经填写了好几个表单项。假如此时用户刚好开始填写密码,就出现了下面的情景:
不仅破坏了两个已经填好的字段,对密码的安全也是一个威胁。
某些方法例如jQuery提供的domReady可以比onload更早执行,然而在网速极慢的时候仍然无法完全避免这种情况。
解决办法?我想大概有两种思路吧,一种是在用户名字段后面紧接着就插入一段javascript,让该字段获取焦点。
另一种,当表单中有字段获得焦点时,hook到onload的函数不再设置焦点。实现方式可以有很多种。
Leave a Reply