浏览器会将带有密码输入域的表单进行自动填充,在登录界面给用户带来很大的便利。但是,在非登录表单存在密码输入域时,浏览器也会自动填充,从而会带来一定坏得影响。禁止浏览器对表单自动填充的四种方法如下:

 

第一种方法:将type=“password” 改为 type="text" ,然后再在必要的时候将其改回password

猜想,浏览器自动填充识别的是 type="password" 然后将该input自动填入密码

那么,我们考虑将type=“password” 改为 type="text" ,然后再在必要的时候将其改回password

这个必要的时候我们选择在当密码的input获得焦点时,即在 时改变type="password",代码如下:

$(\"#psw\").focus(function(event) {
   $(this).attr(\'type\',\'password\');
});

以上代码不兼容ie8以下,兼容代码如下:

var isLTIE9 = function(){
    var bObj = document.createElement(\'b\');
    bObj.innerHTML = \'<!--[if lt IE 9]><i></i><![endif]-->\';
    return bObj.getElementsByTagName(\'i\').length === 1;
}
if(!isLTIE9()) {
   $(\"#psw\").focus(function(event) {
      $(this).attr(\'type\',\'password\');
   });
}else{
   var pswInput = document.getElementById(\"psw\");
   var pswInput2 = pswInput.cloneNode(false);
   pswInput2.type=\'password\';
   pswInput.parentNode.replaceChild(pswInput2,pswInput);
}

 

第二种方法:在用户名和密码之间加上一个隐藏的文本框

<input type=\"text\" name=\"name\">  
<input type=\"hidden\">  
  <input type=\"password\" name=\"pass\"> 

 

第三种方法:使用假的 input 让浏览器去填充

在页面 <body> 后加入:

<!-- fake fields are a workaround for chrome autofill getting the wrong fields -->
<input style=\"display:none\" type=\"text\" name=\"fakeusernameremembered\"/>
<input style=\"display:none\" type=\"password\" name=\"fakepasswordremembered\"/>

这个方案原理是让浏览器去填充用户实际上看不到的 input。虽然看上去代码比较 low,但是很实用

 

第四种方法:使用 autocomplete 属性

在不需要自动填充的 input 上设置 autocomplete 属性:

<pre name=\"code\" class=\"html\"><input type=\"text\" name=\"name\" autocomplete=\"off\">  
<input type=\"password\" name=\"pass\" autocomplete=\"off\">  

这个方案只对chrome浏览器生效。

收藏 打印