为解决这两个问题,浏览了一些国内和国外的网站。
对于问题一:是因为type=password引起的,保存了密码之后,进入另一个页面的时候,如果有type=password,浏览器会寻找与它临近的input type=text,将用户名填上。
由此,解决方法有:仍然使用type=password,只是增加了fake input control,即在此之前加上
HTML 代码
,用于混淆浏览器。1<input type="text" style="display:none;" />
第二个方法,使用type=text,当用户输入密码的时候进行编码,即转换成小圆点,这里写了一段代码,首先是两个控件,hidden的控件用于提交表单:
HTML 代码
123<input type="hidden" name="test.cvvCode" /><input id="cvvCode" type="text" aria-required="true" maxlength="4" />
用于编码的JS代码:
HTML 代码
123456789101112131415161718192021222324252627282930<script type="text/javascript">if(isIE){document.getElementById("cvvCode").onpropertychange = MaskPassword();}else //FF{document.getElementById("cvvCode").addEventListener("input", MaskPassword, false);}function MaskPassword(){var inputPassword = document.getElementById("cvvCode").value;var plainPassword = document.getElementsByName("test.cvvCode")[0].value;var encodePassword = '';if (inputPassword != '') {for (var i=0; i<inputPassword.length; i++) {if (inputPassword.charAt(i) == "\u25CF"){ // has been encodeencodePassword += inputPassword.charAt(i);} else{plainPassword += document.getElementById("cvvCode").value.charAt(i)encodePassword += "\u25CF";}}} else{plainPassword = inputPassword;}document.getElementsByName("test.cvvCode")[0].value = plainPassword;document.getElementById("cvvCode").value = encodePassword;}script>
首先判断是什么浏览器,然后绑定什么方法,onpropertychange是IE专有的。
后面方法是输入一位,改变一位,变成“\u25CF”小圆点,然后赋值为隐藏域,进行提交表单。
这样的不足之处是:按F12,hidden的value会显示出来。
对于问题二:
原来有个属性autocomplete=off,现在随着浏览器的升级,IE11,Chrome34+,FireFox30都不再支持这个属性了,由此使用这个方法不能解决问题二。
关于各大浏览器disable这个属性,有的说是,用户输入用户名和密码后,浏览器没有弹出自动保存密码的对话框的话,用户会认为浏览器有问题;还有人认为这是浏览器的bug。
现在用的是两个fake input control,即在原来的type=password控件前添加:
HTML 代码
12<input type="text" id="fakeUserId" style="display:none;" /><input type="password" id="fakePwd" style="display:none;" />
这样一来,IE和Chrome不再弹了,但是火狐还是会弹出自动保存密码对话框。
这个是转载 http://www.w3cfuns.com/notes/16116/8741cbfbd6bc8bc75c1401326922e29f.html的
根据上面的方法最终的处理办法
一、在 下面添加以下代码
function IEAndFF(){
document.getElementsByName("password").onpropertychange = MaskPassword();
}
function MaskPassword(){
var inputPassword = document.getElementById("login_pwd").value;
var plainPassword = document.getElementsByName("password")[0].value;
var encodePassword = '';
if (inputPassword != '') {
for (var i=0; iif (inputPassword.charAt(i) == "\u25CF"){ // has been encode
encodePassword += inputPassword.charAt(i);
} else{
plainPassword += document.getElementById("login_pwd").value.charAt(i)
encodePassword += "\u25CF";
}
}
} else{
plainPassword = inputPassword;
}
document.getElementsByName("password")[0].value = plainPassword;
document.getElementById("login_pwd").value = encodePassword;
}
onkeyup="IEAndFF()" ;/>
最终在借鉴原创的基础上终于骗过了浏览器。