今天改两个前端页面的bug,一个是登陆失败后验证码不会刷新需要手动点击刷新(除了firefox浏览器外),另外一个是独独firefox点击验证码无法刷新
先说一下登录后验证码不会刷新这个,一开始思路是登陆失败就刷新页面,然后就在判断登录失败时加了句window.location。结果虽然可以刷新页面,但是如果账号密码输入框里面没有设置记住号码则需要再次填写,就换了种思路,直接调用验证码刷新。一开始是在判断登录失败时执行:
var imh=document.getElementById("xxx");
img.src="<{:U(('verifycode')}>?t=<{:time()}>"
发现达到预期目的,但是一试之后在firefox也不行,那就说明这个生成验证码的代码在firefox的处理机制跟其它浏览器不一样。就把time()改成Math.random()跟new Date();发现结果都一样。
源代码是:
onclick='this.src="<{:U('verifycode')}>?t=<{:time()}>"
和
onclick='this.src="<{:U('verifycode')}>?t=Math.random()"
然后就到浏览器看html源码,发现验证码在firefox上面点击是一串不变的地址(其它浏览器也是地址不变),但是就firefox无法更新图片,就想着是不是firefox对验证码的处理机制不同,然后就把代码改成:
onclick='this.src="<{:U('verifycode')}>?t="+Math.random()
结果测试成功了没问题,然后再把判断登录失败后的代码加上:
var imh=document.getElementById("xxx");
img.src="<{:U(('verifycode')}>?t="+Math.random();
总算把问题都解决了,总的来说就是对浏览器机制不了解,firefox是需要地址变换才会更新验证码图片,别的浏览器只要是加载任意地址都会更新图片。