ฉันมีหน้าเว็บที่อนุญาตให้ผู้ใช้ดาวน์โหลดไฟล์ที่สร้างขึ้นแบบไดนามิก ใช้เวลานานในการสร้างดังนั้นฉันต้องการแสดงตัวบ่งชี้ "กำลังรอ" ปัญหาคือฉันไม่สามารถหาวิธีตรวจสอบเมื่อเบราว์เซอร์ได้รับไฟล์ดังนั้นฉันสามารถซ่อนตัวบ่งชี้
ฉันกำลังร้องขอในรูปแบบที่ซ่อนอยู่ซึ่งโพสต์ไปยังเซิร์ฟเวอร์และกำหนดเป้าหมาย iframe ที่ซ่อนอยู่สำหรับผลลัพธ์ นี่คือสิ่งที่ฉันไม่ได้แทนที่หน้าต่างเบราว์เซอร์ทั้งหมดด้วยผลลัพธ์ ฉันฟังเหตุการณ์ "โหลด" ใน iframe ด้วยความหวังว่ามันจะทำงานเมื่อการดาวน์โหลดเสร็จสิ้น
ฉันส่งคืนหัวข้อ "เนื้อหาการจัดการ: ไฟล์แนบ" พร้อมไฟล์ซึ่งทำให้เบราว์เซอร์แสดงข้อความโต้ตอบ "บันทึก" แต่เบราว์เซอร์ไม่ได้เรียกใช้เหตุการณ์ "โหลด" ใน iframe
วิธีการหนึ่งที่ฉันลองใช้คือการตอบกลับแบบหลายส่วน ดังนั้นมันจะส่งไฟล์ HTML ที่ว่างเปล่ารวมถึงไฟล์ที่ดาวน์โหลดได้ที่แนบมาด้วย ตัวอย่างเช่น:
Content-type: multipart/x-mixed-replace;boundary="abcde"
--abcde
Content-type: text/html
--abcde
Content-type: application/vnd.fdf
Content-Disposition: attachment; filename=foo.fdf
file-content
--abcde
สิ่งนี้ใช้ได้ใน Firefox ได้รับไฟล์ HTML ที่ว่างเปล่าไฟเหตุการณ์ "โหลด" จากนั้นแสดงกล่องโต้ตอบ "บันทึก" สำหรับไฟล์ที่สามารถดาวน์โหลดได้ แต่มันล้มเหลวบน IE และ Safari; IE เริ่มการทำงานของเหตุการณ์ "โหลด" แต่ไม่ดาวน์โหลดไฟล์และ Safari จะดาวน์โหลดไฟล์ (ที่มีชื่อและประเภทเนื้อหาผิด) และจะไม่เริ่มการทำงานของเหตุการณ์ "โหลด"
วิธีการอื่นอาจเป็นการโทรเพื่อเริ่มการสร้างไฟล์จากนั้นสำรวจเซิร์ฟเวอร์จนกว่าจะพร้อมแล้วดาวน์โหลดไฟล์ที่สร้างขึ้นแล้ว แต่ฉันควรหลีกเลี่ยงการสร้างไฟล์ชั่วคราวบนเซิร์ฟเวอร์
ใครบ้างมีความคิดที่ดีกว่า