转储文件时,iframe onLoad不会触发?

我有一个简单的iframe

   

哪个附加了onload处理程序。

 $(".ifr").on('load',function (){ alert("iframe loaded") }); 

还有2个按钮:

在此处输入图像描述

当我按下第一个按钮(设置为一个站点(没关注哪个)时 – 它发出警报:

在此处输入图像描述

然而,当我将它设置为mypage (转储图片)时 – 图片下载它不会触发onload

当我按下第二个按钮时,它会重定向到其代码为的页面:

  Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=/images/about_us_bkg.jpg"); Response.AddHeader("content-length", File.ReadAllBytes(Server.MapPath("~/images/about_us_bkg.jpg")).Length.ToString()); Response.TransmitFile(Server.MapPath("~/images/about_us_bkg.jpg")); Response.End(); 

我相信它与Response.End();

题 :

  • 为什么(如果有的话)它会受到Response.End影响? 我的意思是浏览器确实发送了一个响应 (作为图片)….所以?

  • 如何解决这个问题,以便在图片加载(或iframe完成)时,它会触发onload事件?

ps为什么我需要它?

当用户按下“下载文件”时,在客户端-I显示加载动画,而onload假设删除“加载”动画。

JSBIN

 Why (if ever) it is affected by Response.End ? I mean the browser did send a response ( as a picture) , so the request is completed ....no? 

我不认为它与Response.End有关(除非它在删除Response.End时有效)您可以使用Context.ApplicationInstance.CompleteRequest()而不是Response.End (请参阅Asp.Net Response.TransmitFile的正确用法)和Response.End() )

如何解决这个问题,以便在图片加载(或iframe完成)时,它会触发onload事件?

我认为问题来自于你的iframe内容不是html文档或img元素。 所以它不会触发任何加载事件。

您可能让您的aspx页面在查询字符串参数上有两种不同的行为(或者只有两页):

  • 一个服务于图像的人(比如img.aspx ,你已经拥有的那个)
  • 一个,比如document.aspx ,哪个url将用作你的iframe src属性。 document.aspx构建一个包含img元素的整个html文档,其中src将是img.aspx

希望这会有所帮助