Javascript 响应后关闭窗口。结束()?

Javascript 响应后关闭窗口。结束()?,javascript,asp.net,vb.net,Javascript,Asp.net,Vb.net,我正在使用下面的代码下载Excel文件。运行Response.End()调用后,我想关闭窗口。然而,这并没有发生。请看下面的代码 'Write it back to the client Dim filename As String = "FullExtract_" & Now.Year.ToString & Now.Month.ToString & Now.Day.ToString & ".xlsx" Response.ContentType =

我正在使用下面的代码下载Excel文件。运行
Response.End()
调用后,我想关闭窗口。然而,这并没有发生。请看下面的代码

'Write it back to the client

   Dim filename As String = "FullExtract_" & Now.Year.ToString & Now.Month.ToString & Now.Day.ToString & ".xlsx"
   Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
   Response.AddHeader("content-disposition", "attachment;  filename=" & filename)
   Response.BinaryWrite(pck.GetAsByteArray())
   Response.End()
   'cursor not reaching to below code   
   Page.ClientScript.RegisterStartupScript(Me.GetType(), "closedownload", "JavaScript:window.close(); return false;")

如何关闭窗口?

不要呼叫响应。结束。这会引发线程异常,这会导致各种各样的不愉快的事情。此外,此异常正是阻止您在响应.End not激发后使用Page.ClientScript的原因。因此,只需删除响应。结束。它不再需要了,是旧的经典ASP时代的延续

编辑:你不能像那样关闭窗口;发送文件下载时,应在用户操作系统上打开文件保存提示,文件将下载。我认为,生成的html RegisterStartupScript最终将作为文件下载的一部分。您可能应该让触发下载的按钮或链接使用target=“\u blank”或通过javascript打开一个新窗口的页面,该窗口将自动关闭,甚至不会打开,具体取决于浏览器

调用
Response.End()
会停止页面的执行,因此不会处理注册脚本的行。但是,我认为在将文件内容发送到浏览器后,应该调用
Response.End()
,以便浏览器正确接收文件

为了关闭窗口,但允许下载文件,您可以尝试使用java脚本显示弹出窗口,然后关闭它,同时保持其父页面打开

这里有一些解决类似问题的建议:


    • 首先,我认为您的关闭窗口脚本应该是这样的↓

      Page.ClientScript.RegisterStartupScript(this.GetType(), "closedownload", "<script language='javascript'>window.opener=null;window.close();</script>");
      
      Page.ClientScript.RegisterStartupScript(this.GetType(),“closedownload”,“window.opener=null;window.close();”;
      
      然后,我想为什么在response.end()之后不能关闭窗口是关于

      从上面的文档中,我们可以了解订单

      页面加载->控制事件->页面渲染

      1,您注册的javascript将在呈现页面时执行

      2,当您在事件中执行Response.End()(这将绝对停止页面生命周期执行)时,将永远不会触发页面呈现事件


      3,这就是为什么响应后无法关闭窗口。End()。IMHO

      我也有类似的问题,请检查我下面的答案,我希望它能帮助您

      var popupWindow = window.open("endpoint","","setting");
      var att = document.createAttribute("onblure");  // Create a "onblure" attribute
      att.value = "window.close()";                  // Set the value of the class attribute
      popupWindow.setAttributeNode(att); 
      
      这将允许在下载窗口出现时关闭窗口

      注: 端点:是您的新窗口端点
      设置:是您的窗口设置,例如宽度、高度、顶部、左侧。。etc

      当您调用
      Response.End
      时,它会停止页面的执行,因此不会进一步处理页面。请看以下内容:。是否有关闭窗口的建议。我删除了
      Response.End()
      ,控件指向“Page.ClientScript.RegisterStartupScript”,但窗口未关闭。看到代码不工作了吗