Supponiamo di avere il seguente file HTML:Come attivare l'evento onload durante il download di un file in un 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>
Ora, se l'URL al quale iframe di src viene riscritto per (in questo caso - "http://example.com/dload.py") restituisce HTML, nessun problema: l'evento onload, i contenuti dello span sono sostituiti, tutti sono felici.
Tuttavia, se il tipo di contenuto del file restituito dall'URL è impostato su qualcosa che forza il browser ad aprire la finestra di dialogo di salvataggio, l'evento onload dell'iframe non viene mai attivato.
C'è qualche soluzione? L'utilizzo degli iframe non è necessario, il comportamento desiderato è avviare una richiamata dopo che il browser ha iniziato a scaricare il file fornito.
È possibile provare a recuperare il file utilizzando ajax e quindi creare il tag 'a' (collegamento) con l'URI dei dati e fare clic su di esso, ma non l'ho verificato con file di grandi dimensioni. – jcubic