Posts Tagged ‘ue’

关于密码输入延迟屏蔽的UE细节

六月 25th, 2010

最近看到有一些网站开始启用一个类似Iphone、Google Andriod手机的密码输入体验,大致效果如下图,在用户输入密码的时候可以将用户的输入以明文的方式短时间延迟屏蔽。提高用户输入密码的正确率。有点意思,分享一下:

网易通行证的登录页面

目前我看到可用的体验地址有:网易通行证登录页面 网易邮箱注册页面,之前看到新浪邮箱也用了,现在找不到了。

实现原理

从上面两个例子的源代码中可以找到,网易登录页面的是使用的一个开源的项目,叫dpassword,而邮箱注册页面是自己写的javascript文件

Html代码部分

我们知道,原生态的密码输入框是做不到这种效果的,为了实现这种体验,其实是使用了“障眼法”的。在html中,放置了2个input控件,只是一个是用来显示效果的,一个是真正用于保存密码的,如:

<input type="hidden" id="pwd" value="" name="password">
<input type="text" value="" maxlength="16" class="inp ipt-normal" id="password">

将type=”hidden”的那个隐藏input控件来记录用户输入的密码,将type=”text”的这个拿出来做延迟效果。

Javascript部分

javascript需要实现的,无非就是做两件事:

  • 将用户在假的密码输入框中的输入记录到input type=”hidden”这个隐藏控件中去。
  • 在暴露出来的这个假的input type=”text”中去实现延迟屏蔽的动态效果。

为什么需要2个input控件才能完成这个任务,这也是“障眼法”的关键所在,传统密码输入框输入任何字符,都直接是以“圆点”类似的不可见的方式出现的,根本不可能实现先是明文,然后延迟变为“圆点”类的显示方式,此处输入的“圆点”,其实真的是通过javascript将用户输入的字符替换为一个“圆点”的特殊符号的。

所以在网易邮箱注册的那段javascript文件中,可以看到这样的代码片段:

var replacement = unescape('%u25CF');
//定义一个用于替换的“圆点”的字符,% u25CF
function getpass(passin,passstore)//passin为假的密码输入框的ID;passstore为隐藏控件的ID
{
	var passwd=document.getElementById(passstore);
	var strin=passin.value;
	var strcache=passwd.value;
	var password="";
	var strout="";
	for(i=0;i<strin.length;i++)
	{
		switch(strin.charAt(i))
		{
			case replacement:
				password+=strcache.charAt(i)==""?strin.charAt(i):strcache.charAt(i);
				break;
			default:
				password+=strin.charAt(i);
				break;
		}
		strout+=replacement;//将用户输入的变为了“圆点”
	}
	passwd.value=password;
	passin.value=strout;//将假的输入框中的字符替换为“圆点”
}

我的理解

我不确定这种体验是否是源于Iphone,但目前我知道的应该就是Iphone、Google Andriod手机上是这样的。这种良好的手机输入体验,一定是因为触摸屏的高出错率(相对我们的PC键盘输入)驱动的。所以在网站上应用这种细节,它的价值一定是比应用在触摸屏手机上要小的多的……对于稍微熟悉电脑的用户,盲打输入密码还是没有问题的,这种出错率远比误打开caps lock键出现的次数要小的多。

当然,此举也引起了部分不明真相的网民的恐慌,呵呵。

改善用户体验之密码强度提示

十二月 7th, 2006

功能说明:在用户注册或更改密码时,根据用户输入进行检测并返回结果。能有效地提醒用户提高帐号的安全性。

类似效果:Live.com中的修改密码功能

简单预览:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>密码</title>
<style type="text/css">
body{
	font-size:12px;
	font-family: Arial, Helvetica, sans-serif;
	margin:0;
}
form{
	margin:2em;
}
#chkResult{margin-left:53px;height:15px;}
</style>
</head>

<body>
<form name="form1">
	<label for="pwd">用户密码</label>
	<input type="password" name="pwd" onblur="chkpwd(this)" />
	<div id="chkResult"></div>
	<label for="pwd2">重复密码</label>
	<input type="password" name="pwd2" />
</form>
<script type="text/javascript">
	function chkpwd(obj){
		var t=obj.value;
		var id=getResult(t);

		//定义对应的消息提示
		var msg=new Array(4);
		msg[0]="密码过短。";
		msg[1]="密码强度差。";
		msg[2]="密码强度良好。";
		msg[3]="密码强度高。";

		var sty=new Array(4);
		sty[0]=-45;
		sty[1]=-30;
		sty[2]=-15;
		sty[3]=0;

		var col=new Array(4);
		col[0]="gray";
		col[1]="red";
		col[2]="#ff6600";
		col[3]="Green";

		//设置显示效果
		var bImg="attachments/month_0612/v200612702136.gif";//一张显示用的图片
		var sWidth=300;
		var sHeight=15;
		var Bobj=document.getElementById("chkResult");

		Bobj.style.fontSize="12px";
		Bobj.style.color=col[id];
		Bobj.style.width=sWidth + "px";
		Bobj.style.height=sHeight + "px";
		Bobj.style.lineHeight=sHeight + "px";
		Bobj.style.background="url(" + bImg + ") no-repeat left " + sty[id] + "px";
		Bobj.style.textIndent="20px";
		Bobj.innerHTML="检测提示:" + msg[id];
	}

	//定义检测函数,返回0/1/2/3分别代表无效/差/一般/强
	function getResult(s){
		if(s.length < 4){
			return 0;
		}
		var ls = 0;
		if (s.match(/[a-z]/ig)){
			ls++;
		}
		if (s.match(/[0-9]/ig)){
			ls++;
		}
	 	if (s.match(/(.[^a-z0-9])/ig)){
			ls++;
		}
		if (s.length < 6 && ls > 0){
			ls--;
		}
		return ls
	}
</script>
</body>

</html>

使用方法:
第一步:保存图片
第二步:根据您的需要修改js文件中该图片地址。如下所示:

var bImg="pwdlen.gif";//一张显示用的图片

第三步:在需要检测的页面中引用这个脚本文件,如下所示:

<script type="text/javascript" src="chkpwd.js"></script>

第四步:在网页的表单中,找到密码输入框添加onblur事件驱动,然后添加一个Div,如下所示:

<input type="password" name="pwd" onblur="chkpwd(this)" />
<div id="chkResult">强度检测</div>

第五步:根据您页面的需要通过样式表CSS重新定义#chkResult的摆放位置,以合适您网页的整体布局。

完整效果预览:点击这里

脚本文件chkpwd.js 下载:点击下载此文件