次の 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>
ここで、iframe の src が書き換えられる URL (この場合は " http://example.com/dload.py ") が HTML を返す場合、問題はありません: onload イベントが発生し、スパンのコンテンツが置き換えられ、全員のハッピー。
ただし、URL によって返されるファイルのコンテンツ タイプが、ブラウザーにファイルの保存ダイアログを開くように強制するものに設定されている場合、iframe の onload イベントは決して発生しません。
回避策はありますか?iframe を使用する必要はありません。望ましい動作は、ブラウザーが提供されたファイルのダウンロードを開始した後にコールバックを起動することです。