在父窗口中,我们有一个上传文件的按钮,点击它,可以打开上传文件的模式窗口。还一个文本框,用于接收模式窗口的返回值(returnValue)。这个返回值其实就是文件上传后的虚拟路径。
<tr height="60">
<td>图片:</td>
<td><input type="text" name="artImage" id="artImage" size="56" value="" />
<input type="button" value="上传..." onclick="javascript:UploadImg('artImage')">
<p>如果有相关图片,请在此上传</td>
</tr>
点击上传按钮,是调用了一个JavaScript函数,内容如下:
<script type="text/javascript">
<!--
//$选择图片
function UploadImg(targetId){
var windowReturnValue;
var TargetArea=document.getElementById(targetId);
if(TargetArea!=null){
windowReturnValue=window.showModalDialog('config/UploadFile.asp',window,'dialogWidth=430px;dialogHeight=250px;toolbar:no');
if(windowReturnValue == undefined){
windowReturnValue=window.returnValue;
}
if(windowReturnValue!=null){TargetArea.value=unescape(windowReturnValue);}//把返回值插入到targetId
}else{alert("Alert: targetId["+targetId+"] was not existing in UploadImg(targetId)!");}
}
//-->
</script>
在打开的模式窗口中,调用的是config/UploadFile.asp。在这个页面,注意控制一下权限,否则会有上传漏洞,当然,这是题外话了。我们看看这个UploadFile.asp中如何处理返回值的问题。
<SCRIPT LANGUAGE="JavaScript">
<!--
function dook(){
if(document.formUpload.filepath.value!=''){
//parent.window.returnValue=document.formUpload.filepath.value;
if(window.opener != undefined){
//webkit
window.opener.returnValue=document.formUpload.filepath.value;
}else{
window.returnValue=document.formUpload.filepath.value;
}
window.close();
}
else{
alert('请先上传图片!');
}
}
//-->
</SCRIPT>
<A HREF="javascript:dook()">确定</A>
点击确定时,将当前窗口中获取到的文件路径,设置为window.returnValue或window.opener.returnValue。因为在不同的浏览器内核中,处理方式不一样。如webkit核心(Chrome、Sogou高速浏览器、Safari等使用该核心)要使用window.opener.returnValue。而IE、Firefox等浏览器则使用window.returnValue。
还要注意,因为UploadFile.asp页面是在模式窗口中打开的,所以,在某些浏览器中,上传提交按钮点击后会再打开一个窗口。这不是我们想要的,我们得做如下的控制:
<script language="javascript">
window.name="winSelf"
</script>
</head>
<body>
<p>
<form method="POST" enctype="multipart/form-data" action="UploadFile.asp" name="formUpload" target="winSelf">
关于ASP打开模式窗口上传文件,本文就介绍这么多,希望对您有所帮助,谢谢!