|
技术资料 > ASP技术 > ASP技巧 : 控制弹出窗口---用file access组件技巧实例 |
控制弹出窗口---用file access组件技巧实例 March 25,2004 |
跟我学会用后台程序控制弹出窗口---用file access组件修改文件实例
我们经常需要在首页上做一个弹出窗口(其实我很讨厌这个东东),一般的办法是在<body> 中加入这样一句 onLoad="Window.open('new-window.htm','','width=300,height=250')" 其中new-window.htm为新开的窗口网页文件名,后页是宽度和高度,但如果是一会要这个窗口,一会又不要,并且常改这个窗口的内容的话,那真是太太麻烦了(阿余的头就这样,气死我了,有一天竟改了N次,以至于阿余发奋图强,写了这个小程序)。
基本思路:
1。要做这样一个程序,关键在于准确的在首页找到<body>标记,并在其中加上onLoad="Window.open('new-window.htm','','width=300,height=250')" ,使其成为<body onLoad="Window.open('new-window.htm','','width=300,height=250')" >, 怎么才能找到<body>呢?通过观察发现,整个首页就一个<body>,用ins函数找出<body>在页中的起始位置加上五就得到应插入的语句的位置。当然,还要能删除掉onLoad="Window.open('new-window.htm','','width=300,height=250')" 这一句,也就是删除掉从“<body ”到“')"”中间的语句,以撤消弹出窗口,我发现网页中也只有一个“')"” ,至少从首往后找的第一个就是我们要的“')"”。
2。要建立一个文件,名字叫new-window.htm,这比较简单,看后面的代码就知道了。
制作过程:
有了想法,下面我们开工了。
首先制作一个输入参数的页面,文件名为,newwindow.asp 在这个页面上有六个文本框,第一个名为name,用于输入窗口名称,第二个名为co1,用于填写页面底色,第三个名为co2用于填写文字颜色,第四个名为bg,用于填写底图文件名,第五个名为w,用于填写弹出窗口的宽度,第五个名为h,用于填写弹出窗口的宽度。还要一个滚动文本框,名为lr,用于填写要在弹出窗口中发布的内容。再建立三个按钮,第一个为建立弹出窗口,第二个为预览,第三个为撤消弹出窗口,按钮类型均为提交,名了分别为b1,b2,b3。表单提交后由newwindow1.asp文件处理,这个文件的代码如下(你也可按前面的说明自己写):
<!--#include file="window.ini"-->
<html>
<head>
<title>卓越电脑网站快车www.zydn.net</title>
</head>
<body bgcolor="#E0F0F8">
<div align="center">
<p>制作弹出窗口,请输入相关信息<br>
<form method="POST" action="newwindow1.asp">
<table border="1" width="100%" bordercolorlight="#000000" cellspacing="0" cellpadding="4" bordercolordark="#FFFFFF" bgcolor="#A4D1E8" style="font-size: 9pt">
<tr><td>窗口标题:</td><td colspan="2"><input type="text" name="name" size="62" style="border: 1 solid #6384C0" value="<%=name111%>"></td>
</tr><tr><td valign="top">窗口底色:</td> <td><input type="text" name="co1" size="9" style="border: 1 solid #6384C0" value="<%=co1%>"></td>
<td>窗口底图:<input type="text" name="bg" size="21" style="border: 1 solid #6384C0" value="<%=bglr%>"></td> </tr>
<tr><td valign="top">文字颜色:</td> <td colspan="2"><input type="text" name="co2" size="9" style="border: 1 solid #6384C0" value="<%=co2%>"></td>
</tr><tr><td valign="top">窗口大小:</td><td>宽:<input type="text" name="w" size="9" style="border: 1 solid #6384C0" value="<%=w%>">象素</td>
<td>高:<input type="text" name="h" size="9" style="border: 1 solid #6384C0" value="<%=h%>">象素</td> </tr>
<tr><td valign="top">窗口内容:</td><td colspan="2"><textarea rows="9" name="lr" cols="61" style="border: 1 solid #6384C0"><%=lr%></textarea></td>
</tr><tr><td colspan="3" align="center"><input type="submit" value="查看效果" name="B2"><input type="submit" value="建立弹出窗口" name="B1"><input type="submit" value="撤消弹出窗口" name="B3"></td>
</tr></table><p>窗口内容中的<p>用于表示换行</p>
</form></div>
</body>
</html>
在最前面插入有一个文件newwindow.ini,这个文件是用于记录上一数你输入的参数,第一次使用时,只要在这个文件中填几个空格就可以了。
前面的网页输入的参数提交后由newwindow1.asp文件来处理,我们一边看这个文件,一边来给大家解释各个文句的作用,
文件名:newwindow.asp,全文如下:
<%patha=server.MapPath("newwindow1.asp")
patha=left(patha,len(patha)-14) '**以上这两名用于取得文件所在的路径,以便于以后file access组件建立的file systemobject对象读取文件和建立 文件。
name=request.form("name")
co1=request.form("co1")
co2=request.form("co2")
w=request.form("w")
h=request.form("h")
bg=request.form("bg")
lr=request.form("lr") '以上这几句不用说了吧,用来读表单提交的数据,
b1=request.form("b1")
b2=request.form("b2")
b3=request.form("b3") '这里的b1 b2 b3 分别对应三个按钮,如果用户点击b1按扭的话,b1就不为空,我们可由它们的值判断用户到底按了哪一个按钮。
if lr="" then response.redirect "ever.asp?lr=您没有输入窗口中要显示的内容,<br><br>您准备在弹出的窗口中公布什么呢?" '如果用户没有输入内容的话,显示一个提示。这个提示由ever.asp文件显示出来,ever.asp文件的内容在下面单独介绍,单独用一个页面来处理提示信息会使我们的程序简化不少。
if trim(co1)="" then co1="eeeeff" ' 如果用户没有输入窗口底色,则默认底色为#eeeeff 淡蓝色
if trim(co2)="" then co2="000000" '如用户没有输入文字颜色,则默认文字颜色为#000000黑色
if w="" then w=320 '如用户没有输入窗口宽,则默认窗口宽为320象素
if h="" then h=200 '如用户没有输入窗口高,则默认窗口高为200象素
lr=lr+" " '在内容后加上几个空格,以免下面做换行处理时出错
abcc=len(lr)
sclr=""
absn=1
do while absn<abcc
alsa1=mid(lr,absn,1)
if asc(alsa1)=13 then
alsa1="<p>"
absn=absn+1
end if
sclr=sclr+alsa1
absn=absn+1
loop
lr=sclr ' 以上这一段程序用来把内容中的回车符号转为<p>,同时去掉回车后的换行符,回车是用 asc(alsa1)=13 判断出的。
inilr="<"&"%"&chr(13)&chr(10)
inilr=inilr&"name111="&chr(34)&name&chr(34)&chr(13)&chr(10)
inilr=inilr&"co1="&chr(34)&co1&chr(34)&chr(13)&chr(10)
inilr=inilr&"co2="&chr(34)&co2&chr(34)&chr(13)&chr(10)
inilr=inilr&"lr="&chr(34)&lr&chr(34)&chr(13)&chr(10)
inilr=inilr&"w="&chr(34)&w&chr(34)&chr(13)&chr(10)
inilr=inilr&"h="&chr(34)&h&chr(34)&chr(13)&chr(10)
inilr=inilr&"bglr="&chr(34)&bg&chr(34)&chr(13)&chr(10)&"%"&">"
'以上这段程序用于用为newwindow.ini这个文件的内容,其中:chr(34)为双引号chr(13)为回车,chr(10)为换行符,最后的inilr变量的内容为:
' < %
'name111="用户输入的窗口名称"
'co1="用户输入的窗口底色"
'co2="用户输入的窗口文字颜色"
'lr="经处理后的用户输入的窗口内容"
'w="用户输入的窗口宽度"
'h="用户输入的窗口高度"
'bglr="用户输入的窗口底图" % >
pagelr="<html><title>"&name&"</title><body background='"&bg&"' bgcolor='#"&co1&"' text='#"&co2&"' >"&lr&"</body></html>"
'以上的这一句定义了一个变量,存放了弹出窗口的内容,万事具备,准备把它们写入文件。
set fs= createobject("scripting.filesystemobject") '准备动工了,先建立一个filesystemobject对象
set ts=fs.createtextfile(patha&"window.ini",true) '建立一个newwindow.ini文件,注意前面的变量patha是我们在最前面取得的路径,true参数是作用是当已用这个文件时,用新建的文件去覆盖,
ts.writeline(inilr)'在newwindow.ini文件的中写入变量inilr的值。
ts.close '关闭ts对象
'建立窗口就不象建立前面的文件那么简单了,要根据用户按不同的键做不同的处理。
if b1="建立弹出窗口" then '如果用户点击的是建立窗口
set ts=fs.createtextfile(""&patha&"window.htm",true) '则建立的文件名为window.htm,
else
set ts=fs.createtextfile(""&patha&"windowtem.htm",true)'否则建立的文件名为windowtem.htm这个临时文件
end if
ts.writeline(pagelr) '把pagelr变量的值写入刚才建立的文件中
ts.close
if b1="建立弹出窗口" then
response.redirect "createwindow.asp" '如果用户点击的是建立窗口,则转向页面createwindow.asp,之所以不直接写在这里是为了使程序更易读,同时能减少错误,当然也可以用一个定义函数或过程。
end if
if b3="撤消弹出窗口" then
response.redirect "delwindow.asp" '如果用户点击的是撤消窗口,则转向页面delwindow.asp
end if
'如果用户既没有点击建立,也没有点击撤消,肯定是点的预览啦,直接显示下面的内容就可以了。
Response.Write "<body style='text-indent: 30; line-height: 150%' onLoad="&chr(34)&"window.open('windowtem.htm','','width="&w&",height="&h&"')"&chr(34)&" bgcolor='#E0F0F8'>"
Response.Write "看到弹出的窗口了吗?如果满意请返回后点“建立弹出窗口”<br><br><a href='newwindow.asp'>返回</a>"
%>
好啦,到上面可能好多朋友已经知道了个大概,可能不想继续看下去了,不要急,好戏在后头,请看我是怎么修改首页的,在里面加上和减去 onLoad="Window.open('new-window.htm','','width=300,height=250')" ,好了,首先看 cresaewindow.asp, 是怎么加内容的,
<!--#include file="window.ini"-->
<%patha=server.MapPath("newwindow1.asp")
patha=left(patha,len(patha)-14) '同样的,用来检测出当前路径
set fs= createobject("scripting.filesystemobject") '准备开工了,建立filesystemobject对象
set ts=fs.opentextfile(""&patha&"index.asp") '打开首页,假设首页的文件名为index.asp
file= ts.readall '读取index.asp文件的内容到file内存变量中,readall方法用来读取文件的全部内容,textstream对象还read和readline方法,分别用来以字符串为单位读取和以行为单位读取已打开的文件的内容。
ts.close
file1=lcase(file) '把文件中的字符全转为小写,这样可以避免大小写干扰,减少错误
if instr(file1,"onload=")<>0 then response.redirect "ever.asp?lr=你已经建有弹出窗口,如要建立新的弹出窗口,请先撤消原有的窗口 " '如果已有了onload=这一句,表明已经存在弹出式窗口,这时,不能再往里加“onLoad="Window.open('new-window.htm','','width=300,height=250')"”这一句,不然会破坏原有文件。
star=instr(file1,"<body")+5 '找出插入文件的起始位置,
zcd=len(file) '取出文件的总长度
lr1=left(file,star)
lr2=right(file,zcd-star) '这里,我们把原来的文件以刚才检测出的位置分为了两半,分别存到lr1,和lr2两 个变量中
newlr=lr1&" onLoad="&chr(34)&"window.open('window.htm','','width="&w&",height="&h&"')"&chr(34)&""&lr2 '再往这两个变量中间加入我们要加入的语句,新的变量名为:newlr,高度和宽度是刚才我们存在window.ini文件中的,在文件首部我们把这个文件插进来了。
set ts=fs.createtextfile(""&patha&"index.asp",true)
ts.writeline(newlr) '再用newlr写回到index.asp,
ts.close
response.redirect "ever.asp?lr=已成功的建立了弹出式窗口" '哈哈,大功告成。。。。。。
%>
做到这里的时候,当时阿余笑得。。呵呵。。(雕虫小技,有什么可笑,鼠鼠在旁边骂到,鼠鼠是我一年前南下一千多公里接来的MM呀,阿余可不敢得罪她,赶紧闭口不语,紧锁眉头,做沉思状,唔。。好象还真差点什么,想了好久,终于记起,还没写怎么去掉我加的东东,赶忙啪啪又按起键盘来,我隐约感到鼠鼠在做什么。。。。)
删除这一句的文件名为:delwindow.asp代码如下:
<%patha=server.MapPath("newwindow1.asp")
patha=left(patha,len(patha)-14) '第三次出现这两句了,我不用写了吧
set fs= createobject("scripting.filesystemobject")
set ts=fs.opentextfile(""&patha&"index.asp")
file= ts.readall '第二次出现这几句,也不写了
ts.close
file1=lcase(file)
zcd=len(file) '第二次出现这几句,也不写了
if instr(file1,"onload")=0 then response.redirect "ever.asp?lr=您还没有建立弹出式窗口,<br>不能使用本命令" '判断有没建弹出窗口, instr函数用于检测一个字符是否在另一个字符串中,如有,返回位置 ,如无,返回为0
star=instr(file1,"onload=")-1 '找出起始位置
endsn=instr(file1,"'"&chr(41)&chr(34))+3 '找出结束位置
lr1=left(file,star)
lr2=right(file,zcd-endsn) '把文件分为三段,中间一段不要了。
newlr=lr1&lr2 '把前一段和后一段合并。
set fs= createobject("scripting.filesystemobject")
set ts=fs.createtextfile(""&patha&"index.asp",true)
ts.writeline(newlr)
ts.close
response.redirect "ever.asp?lr=已成功的删除了弹出式窗口"
%>
最后还有两个用于做提示信息的ever.asp文件,全文如下:
<html>
<head>
<title>网站快车提示</title>
</head>
<%lr=request("lr")%>
<body bgcolor="#EDFEF5">
<div align="center">
<center>
<table bordercolorlight="#000000" border="1" cellspacing="0" cellpadding="9" bordercolordark="#FFFFFF" bgcolor="#A4D1E8" width="50%"><tr><td align="center">
<br><%=lr%></p></td></tr></table></center>
</div>
<p align="center"><a href="javascript:history.back()">返回</a></p>
</body>
</html>
内容极其简单,阿余不解释了。
写到这里里,阿余大大的伸了个懒腰。啊啊的大叫了不停,真是腰酸背痛眼睛花。。。。。原来写程序如此累。忽然,一杯热咖啡出现在我面前。阿余奋不顾口,呵。鼠鼠真好
最后,告诉大家,这个程序是从阿余一套功能强大的网站后台管理系统中的一个小附件内分离出来的,写成本文的时候,去掉了其中用于选色的调色板部分和选底图的图库部分以及有关安全保护的部分并如代码进行了整理,这套后台系统附件中还包括有如网上报名、网上订购、网上调查、字幕、短消息发布等十几个小程序,我会慢慢介绍给大家,在www.zydn.net可以看到这套后台的大部分功能,另外,还有一件很令阿余高兴的事情,我国的某一很重要的报社的系统报纸和杂志的网站及电子版是用阿余的这套系统制作的,阿余当地的一些政府网站也会用这套系统来控制作网站。当然演示版去掉了部分功能,如多级管理员等重要功能。
好了,阿余在 www.zydn.net 等候大家,如我的程序有所不妥或错误,敬请高手批评指正,阿余先谢了
|
|