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

时间:2013-06-19 07:10:08

标签: c# javascript jquery asp.net http

我有一个简单的iframe

 <iframe class="ifr" src="about:blank"></iframe>

附加了onload处理程序。

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

还有2个按钮:

enter image description here

当我按下第一个按钮(设置为某个网站(没关注哪个)时 - 确实警告:

enter image description here

但是,当我将其设置为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事件?

p.s。我为什么需要它?

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

JSBIN

1 个答案:

答案 0 :(得分:1)

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(请参阅Correct usage of Asp.Net Response.TransmitFile and Response.End()

  

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

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

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

  • 为图像提供服务的人(比如 img.aspx ,你已经拥有的那个)
  • 一个,说 document.aspx ,哪个网址将用作src的{​​{1}}属性。 document.aspx 构建一个包含img元素的整个html文档,iframe img.aspx

希望这会有所帮助