Я вытягивал свои волосы часами, пытаясь понять это. У меня есть iframe, с которым я хочу загрузить файл. Это все работает отлично, но IFrame OnLoad не вызывается, если мой Response.ContentType = "APPLICATION/OCTET-STREAM";
Iframe onload при загрузке файла
Моя Javascript функция выглядит следующим образом:
function DownloadStuff(){
var DownloadSource = "http://Apage.aspx"
var iframe = $("#hiddenDownloader");
if (iframe.attr("id") === undefined) {
$('<iframe />', { id: 'hiddenDownloader', onload:'javascript:alertReady();' }).appendTo('body');
iframe = $("#hiddenDownloader");
}
iframe.attr('src', DownloadSource);
}
function alertReady() {
alert("Ready");
}
Мой стороне сервера код выглядит следующим образом:
Response.Clear();
Response.CacheControl = "no-cache";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetValidUntilExpires(false);
Response.ExpiresAbsolute = DateTime.Parse("1/1/2000");
Response.Expires = 0;
Response.ContentType = "APPLICATION/OCTET-STREAM";
Response.AddHeader("Content-Disposition", "attachment;filename=\"ReportDeck.pptx\"");
byte[] bytes = (byte[])PowerPointFile.Tables[0].Rows[0]["PPTBlob"];
bytes = Compression.DeCompressByteArray(bytes);
Response.OutputStream.Write(bytes, 0, bytes.Length);
Если я удалить ContentType и Header, вызывается onload, но затем файл не загружается через диалог сохранения файла, а вместо этого записывается в iframe.
Любая помощь приветствуется.
С уважением, Байрон Кобб.
Спасибо. У меня есть моя загрузка таким образом, потому что я пытался использовать все возможные решения для onload, прежде чем понял, что это из-за contenttype. – Bob
mmm Я задал аналогичный вопрос http://stackoverflow.com/questions/17184970/iframe-onload-wont-fire-when-dumping-a-file –