मान लीजिए हम निम्न HTML फ़ाइल है:iframe में फ़ाइल डाउनलोड करते समय ऑनलोड ईवेंट को कैसे ट्रिगर करें?
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test iframe download</title>
<script type="text/javascript">
var init = 0;
function download() {
document.getElementById("dload_frame").src = "http://example.com/dload.py";
}
function alert() {
if (init == 0) {
init = 1;
}
else {
document.getElementById("alert_span").innerHTML = "Got it!";
}
}
</script>
</head>
<body>
<span id="alert_span">Main content.</span><br/>
<input type="button" value="Download" id="btn" onclick="download()" />
<iframe id="dload_frame" src="http://404.com/404" onload="alert()"> </iframe>
</body>
</html>
अब, अगर वह URL जिससे iframe src के लिए फिर से लिखा जा रहा है (इस मामले में - "http://example.com/dload.py") रिटर्न एचटीएमएल, कोई समस्या नहीं: ऑनलोड घटना की आग, अवधि की सामग्री बदल दी जाती है, सभी खुश हैं।
हालांकि, अगर यूआरएल द्वारा लौटाई गई फाइल का सामग्री प्रकार कुछ ऐसा सेट है जो ब्राउजर को सेव फाइल डायलॉग खोलने के लिए मजबूर करता है, तो आईफ्रेम की ऑनलोड घटना कभी नहीं होती है।
कोई वैकल्पिक हल है? Iframes का उपयोग करना जरूरी नहीं है, वांछित व्यवहार ब्राउज़र के साथ आपूर्ति की गई फ़ाइल डाउनलोड करने के बाद कॉलबैक लॉन्च करना है।
आप AJAX का उपयोग कर फ़ाइल लाने की कोशिश कर सकते हैं और फिर डेटा यूआरआई के साथ 'ए' टैग (लिंक) बना सकते हैं और उस पर क्लिक कर सकते हैं, लेकिन मैंने इसे बड़ी फ़ाइलों के साथ परीक्षण नहीं किया। – jcubic