1

我有一个简单的iframe

 <iframe class="ifr" src="about:blank"></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为什么我需要它?

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

JSBIN

4

1 回答 1

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(请参阅Asp.Net Response.TransmitFile 和 Response.End() 的正确用法

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

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

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

  • 提供图像的一个(例如img.aspx,您已经拥有的那个)
  • 一,说document.aspx,哪个 url 将用作src您的 .aspx 的属性iframedocument.aspx构建一个完整的 html 文档,其中包含一个 img 元素,该元素src将是img.aspx

希望这会有所帮助

于 2013-06-19T09:16:42.780 回答