假设我们有以下 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 事件触发,span 的内容被替换,每个人的快乐的。
但是,如果 URL 返回的文件的内容类型设置为强制浏览器打开保存文件对话框,则 iframe 的 onload 事件永远不会触发。
有什么解决方法吗?不需要使用 iframe,所需的行为是在浏览器开始下载提供的文件后启动回调。