Ruby's Louvre

每天学习一点点算法

导航

搜狗浏览器下 禁止浏览器自动填写用户名、密码

搜狗浏览器下,会出现把用户设置记住密码的表单(用户名和密码)乱放在,网站中其他成对出现的用户名及密码框中. 如何解决这种不负责任的可恨问题,网上有很多方案,但最终都未果。

一、先把网上搜到的方案放下:

1.在input上使用autocomplete="off",但在有的浏览器上还是被记住了用户名跟密码。

2.大部分浏览器都是根据表单域的type="password"来判断密码域的,所以针对这种情况可以采取“动态设置密码域”的方法:

  

在搜狗浏览器贴树皮一样的控制下,依然不好使,确实一开始加载页面后是不会出现了,可一旦输入框被点击, 类型变成了密码框后依然会马上被填上不该属于它的数据(作为输入框,这也是一种可悲,同情 T_T……)

3.在onload事件,把密码框的值清空,即:

window.load = function(){   
document.getElementById('密码域ID').value='';   
};  

这要是好使早就用了,都不用上网查这么多,js也被无情的pass了

4.采用flash做登录表单,这种情况浏览器也不会记录表单信息。才疏学浅,flash我地不造,没试验过是否有效。

5.这个比较麻烦,就是可以把type="password"改成type="text", 因为type不是password就不会出现记住密码功能,然后设置一个变量如:var val="" 或者是设置一个隐藏域<input type="hidden" name="val">, 最后用onpropertychange(ie)或oninput(其他)把密码换成一行圆点,并把值赋给val, 提交时再把val的值还原回去,由于效果和*号一样。 用户是看不出来的。这种方法有两个难点:

(1)苍天啊大地啊,代表密码的圆点打不出来啊键盘上找不到啊找不到……

(2)用来显示的圆点个数怎么根据用户的输入动态变化(请原谅我没多想),因为这两个原因这个方法也对我天地无用

二、聪明才智绝顶的我(纯粹是个人的非分之想)想到了一个非常简单还能够达到目的的方法:

在实验的过程中发现搜狗浏览器是通过记住表单域id的值来确定填写位置的,但各种取值不允许我去掉id这个神一样镶金边的属性, 所以我想他搜狗如果是按两个相邻的用户名和密码输入框中自动填值的话, 那我把这对鸳鸯中间插一脚让用户名框和中间后来的小三三密码框成为一对,把原来密码框的id付给小三,再把那三货隐藏了, 从此原配密码框就摆脱了被填数据的烦恼(用户名君也不会被赋值), 当用户输入密码时把值付给中间的密码框,这样通过id来取值的语句一点也不用变, 事实证明我是对滴,我在他俩中间加了个密码输入框付了id(还没隐藏),搜狗马上就老实了:

本来是这样的:  
  
  
加工之后:  
  
 //新加个密码框替代原来的,把id付给它  
 //原来的密码框还是用户真正接触使用的,只是id没有了,搜狗就不会给他填数据了  


还有一个方法不用这么麻烦,无意中发现,只要在原来的密码框后再加个密码框再隐藏(这个密码框不用加处理之类乱码七糟的东西),也会解决问题,不懂其中的科学原理,初步猜测是破坏了用户名密码俩一对的搭配形式,可是把简单的密码框插到中间却没什么效果:

  
  
 //后加个隐藏的密码框破坏自动填表符合的结构  

posted on 2016-01-07 11:52  司徒正美  阅读(3839)  评论(3编辑  收藏  举报