大家可能在填写完用户名或者密码时因为某种原因未登录而离开,这时大家可能因为密码框的星号而麻痹大意:以为密码不会被窥视,而放心离开。但是有一种软件可以直接查看星号隐藏下的密码原文,这就带来些安全隐患。不过本脚本可以让你的表单的密码区躲开密码星号查看软件的查看。
原理:生成一个ID为随机的隐藏Input,通过onkeyup事件实时捕获按键,并且复制到这个隐藏的Input里,同时将原密码区的值以“*”号替换掉。发送表单时,将隐藏Input的密码原文复制到原密码区并且销毁这个ID随机的隐藏Input。
下面注解如果在描述上有什么不妥欢迎提出
代码:
/*
基于表单防止星号查看器的脚本
作者:oror@Blueidea
邮箱:pcn88#hotmail.com
网站:www.wyev.com
*/
var aKey=new Array();
//用于保存随机隐藏Input的ID值
var aPrt=new Array();
//用于保存所有受保护Input的name值
var szFrm;
//用于保存表单名
frmProt={
/*
获得ID对应对象
szID:[字符串]对象ID属性
*/
$:function (szID){
return document.getElementById(szID);
},
/*
获得表单域对象
szFrmName:[字符串]表单的name值
*/
$v:function (szFrmName){
return document.forms[szFrmName];
},
/*
获得表单域的Input标签对象
szName:[字符串]标签的name值
szFrmName:[字符串]表单的name值
*/
$f:function (szName,szFrmName){
return frmProt.$v(szFrmName).elements[szName];
},
/*
绑定事件
obj:[OBJECT]对象
evn:[字符串]事件名称
f:函数
*/
fAttach:function (obj,evn,f){
if(!obj)return ;
if(obj.attachEvent){
obj.attachEvent("on" evn,f);
}
if(obj.addEventListener){
obj.addEventListener(evn,f,false);
}
},
/*
获得随机数字
dwIn:[数字]随机范围
*/
fRand:function (dwIn){
return Math.floor(Math.random()*dwIn);
},
/*
获得随机字母与数字组合
dwLen:[数字]返回值长度
*/
fRandom:function (dwLen){
var dwDx,szResult="",szTmp;
var aMySd=new Array();
//建立数组用于保存随机字符,这里分成3组
aMySd[0]="abcdefghijklmnopqrstuvwxyz";
//第一组[0]:小写字母
aMySd[1]="0987654321";
//第二组[1]:数字
aMySd[2]=aMySd[0].toUpperCase();
//第三组[2]:大写字母
for(var i=0;i<dwLen;i ){
//依长度循环
dwDx=frmProt.fRand(3);
//获得一个随机数,范围0~2
szTmp=aMySd[dwDx];
//取出一组
szResult =szTmp.substr(frmProt.fRand(szTmp.length),1);
//随机取出这一组中某个字符
}
return szResult;
},
/*
建立标签函数
szTarget:[字符串]父标签。生成的新标签将置于其中
szType:[字符串]要生成的标签类型
aProp:[数组]属性设置,如 Array("type=text","size=20")
*/
fCreateTarget:function (szTarget,szType,aProp){
var aTmp;
var objLocation=frmProt.$v(szTarget);
//获得父标签对象
var objPreCreate=document.createElement(szType);
//初始标签
for(var i=0;i<aProp.length;i ){
//设置属性循环开始
aTmp=aProp[i].split("=");
//按=号分开
if(aTmp.length<2){
//注意为避免设置错误,这里做个判断
alert("错误的属性值设定");
return ;
}
objPreCreate.setAttribute(aTmp[0],aTmp[1]);
//设置属性
}
objLocation.appendChild(objPreCreate);
//建立这个标签
},
/*
销毁标签
szTarget:[字符串]要销毁标签的父标签
szID:[字符串]要销毁标签ID
*/
fRemoveTarget:function (szTarget,szID){
var objLocation=frmProt.$v(szTarget);
//获得父标签对象
objLocation.removeChild(frmProt.$(szID));
},
/*
创建隐藏Input标签
szBase:[字符串]父标签。生成的Input标签将置于其中
szName:[字符串]Input标签的name属性
*/
fCreateHidden:function (szBase,szName){
var aHide=new Array("type=hidden","id=" szName,"value=");
//设置属性
frmProt.fCreateTarget(szBase,"input",aHide);
//调用fCreateTarget创建
},
/*获得event事件,主要为了兼容FireFox浏览器*/
fGetEvent:function (){
var objCaller=frmProt.fGetEvent.caller;
var objEvent,objResult=null;
while(objCaller!=null)
{