Предположим, что у нас есть следующий файл HTML:
<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"), возвращает HTML, no проблема: срабатывает событие onload, содержимое диапазона заменяется, все довольны.
Однако, если тип содержимого файла, возвращаемого URL-адресом, установлен на то, что заставляет браузер открывать диалог сохранения файла, событие iframe onload никогда не срабатывает.
Есть ли способ обхода? Использование iframe не требуется, желаемое поведение - запустить обратный вызов после того, как браузер начнет загрузку прилагаемого файла.