WEB UI 设计小技巧

    以下内容转自http://blog.csdn.net/fanweiwei/

小技巧清单:

1. 完美iframe自适应宽度和高度(支持ie,ff) 

2. Div自动滚动到末尾 

3. iframe 高度自适应完美解决方案

4. Url编码问题

5. 身份证验证脚本

6. 对WinForm的App.config文件进行加密 

7. js刷新父页面

8. javascript 框架间函数传递

 

完美iframe自适应宽度和高度(支持ie,ff) 

<script type="text/javascript" language="javascript"> 

<!--  function TuneHeight(fm_name,fm_id)

{      var frm=document.getElementById(fm_id);     

var subWeb=document.frames?document.frames[fm_name].document:frm.contentDocument;      if(frm != null && subWeb != null){         frm.style.height = subWeb.documentElement.scrollHeight+"px";

//如需自适应宽高,去除下行的“//”注释即可 //      frm.style.width = subWeb.documentElement.scrollWidth+"px";     }  }  //-->  </script>  <iframe onLoad="{TuneHeight('FM_Name','FM_Id');}" src="eleews.com" name="FM_Name" id="FM_Id" width="900" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>

" Div自动滚动到末尾

在一<div></div>内有一Table,利用js不停往table中执行insertRow(-1),

div.style.overflow = "auto"

想让div在执行insertRow(-1)之后自动滚动到末尾(新行)

方法:

var newRow = table.insertRow(-1);

newRow.scrollIntoView();

" iframe 高度自适应完美解决方案

<div id="Wealth">
    <iframe id="main" name="main" scrolling="no" src="HTMLPage3.htm" frameborder="0" width="100%"></iframe>
<script type="text/javascript">

function reinitIframe(){

var iframe = document.getElementById("main");
//alert(iframe.innerHTML);

try{

var bHeight = iframe.contentWindow.document.body.scrollHeight;

var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;

var height = Math.max(bHeight, dHeight);

iframe.height =  height;

}catch (ex){}

}

window.setInterval("reinitIframe()", 200);

</script>
</div>
<a href ="LinkTest.htm" target="main">LinkTest</a>

" Url编码问题

前几天,用到url编码,所以,谈谈自己的感受。

我们知道,在浏览器的地址栏里面,汉字会被编码,或者是用gb2312,或者用utf-8,那么,我们如果想还原编码的真是面目,应该怎么弄呢。其实,微软在.net

类库里面已经给我们提供了相应的类, HttpUtility 类,里面有大量的方法和属性来供我们使用,下面来举个例子

百度用的是gb2312编码,google用的是utf-8编码,所以,我们以谷歌的搜索为例

HttpUtility.UrlDecode("+%E5%90%8C%E6%96%B9%E7%9F%A5%E7%BD%91", System.Text.Encoding.UTF8);

身份证验证脚本

function checkIdcard(idcard){
var Errors=new Array(
"验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地区检验
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
alert(Errors[4]);
//身份号码位数及格式检验
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
} else {
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
}
if(ereg.test(idcard)) return Errors[0];
alert(Errors[0]);
else return Errors[2];
alert(Errors[2]);
break;
case 18:
//18位身份号码检测
//出生日期的合法性检查
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式
} else {
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){//测试出生日期的合法性
//计算校验位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);//判断校验位
if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位
else return Errors[3];
alert(Errors[3]);
}
else return Errors[2];
alert(Errors[2]);
break;
default:
return Errors[1];
alert(Errors[1]);
break;
}
}

对WinForm的App.config文件进行加密 

对WinForm的App.config文件进行加密 
  最近在做一个WinForm的项目,由于采用的是在客户端直接连接数据库的方式,需要在客户端部署App.config,由于使用了Enterprise Library,需要对App.config文件里的connectionStrings片断进行加密处理,搜索MSDN,发现已经有了现成的工具ASP.NET IIS 注册工具 (Aspnet_regiis.exe),可是它只能针对ASP.NET的Web.config文件,难道我们就没有办法了吗?答案当然是否定的。
配置选项
-pdf section webApplicationDirectory 对指定物理(非虚拟)目录中的 Web.config 文件的指定配置节进行解密。 
-pef section webApplicationDirectory 对指定物理(非虚拟)目录中的 Web.config 文件的指定配置节进行加密。 
    -pdf 和-pef 参数是对指定的物理目录里的Web.config文件进行加密,我们可以先将App.config文件改名为Web.config,通过这两个参数便可以“骗”过系统,让它将指定的配置节进行加密,我们只需要将加密后的文件名改回App.config即可,我们来实验一下:
    第一步:先将目录下的App.config改名为Web.config。
    第二步:打开SDK命令提示,输入命令:aspnet_regiis -pef "配置节" "目录",
例如:
  输入命令:aspnet_regiis -pef "connectionStrings" "E:\开发目录",
由此可见,我们已经完成了任务,现在只需要将Web.config文件名改回App.config即可,在应用程序项目中无需对该文件进行解密操作,.NET框架会自动替我们完成,如果想解密该文件也很简单,在SDK命令提示里输入aspnet_regiis -pdf "配置节" "目录"即可。

PS:利用上面的这个方法,是不是也可以将INI文件给加密了,利用这个思路,是否可以解决困扰以前的map问题.

 

js刷新父页面

非模态刷新父页面:window.opener.location.reload();
模态刷新父页面:window.dialogArguments.location.reload();
Response.Write("<script language=\"javascript\">\r\n");
Response.Write("<!--\r\n");
Response.Write("if(dialogArguments != null){\r\n");
// 注意上面的dialogArguments,就是父页面showModalDialog()的第二个参数。
// 就是父页面的window对象引用。
Response.Write("dialogArguments.location.reload(true);\r\n");
// 上面就是刷新父页的代码,相当于在父页上使用
// window.location.reload(true);代码
Response.Write("window.close();}"); // 关闭对话框
Response.Write("//-->\r\n</script>"); //关闭脚本块
}
上面的代码就是关闭对话框和刷新父页的代码,这段代码也可以直接写入editdata.aspx的html中,然后在后台cs中调用.

 

javascript 框架间函数传递

/*********index.htm*******主文件
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Untitled Document</title>
</head>

<frameset cols="80,*" frameborder="NO" border="0" framespacing="0">
  <frame src="left.htm" name="leftFrame" scrolling="NO" noresize>
  <frame src="right.htm" name="mainFrame">
</frameset>
<noframes><body>
</body></noframes>
</html>
/************left.htm
<html>
<body>
<input type="submit" name="Submit" value="Submit" onClick="testFunc('hello')">

<script language="javascript">
function testFunc(args){
parent.mainFrame.rightFunc(args);
}
</script>
</body>
</html>
/*********right.htm
<html>
<body>

<script language="javascript">
function rightFunc(args){
alert(args);
}
</script>
</body>
</html>

posted @ 2009-05-16 12:18  守护心中彩虹  阅读(243)  评论(0编辑  收藏  举报