在父窗口中,我们有一个上传文件的按钮,点击它,可以打开上传文件的模式窗口。还一个文本框,用于接收模式窗口的返回值(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>&nbsp;

<form method="POST" enctype="multipart/form-data" action="UploadFile.asp" name="formUpload" target="winSelf">

关于ASP打开模式窗口上传文件,本文就介绍这么多,希望对您有所帮助,谢谢!

03-15 23:42