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