假设我们有以下的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,没有问题:onload事件触发时,跨度的内容被替换,每个人都快乐。
但是,如果该URL返回的文件的内容类型设置的东西,强制浏览器打开保存文件对话框,iframe的onload事件永远不会触发。
有没有什么解决方法吗? 使用内部框架是没有必要的,期望的行为是浏览器开始下载提供的文件后,推出的回调。
我也遇到同样的问题,因为这样的:这是我的工作,各地,请看看它是否适合你:
<script>
function download(){
var url = 'http://example.com/dload.py';
var htm = '<iframe src="' + url +'" onload="downloadComplete()"></iframe>';
document.getElementById('frameDiv').innerHTML = htm;
}
</script>
<div style="display:none" id="frameDiv">
</div>
<button onclick="download()">download file</button>
至于我能想起的iframe的onload事件触发一次。 设置src属性的另一个值不会造成onload事件再次触发。
经过许多不同的方法我的解决方案,以获得跨越FF即Safari和Chrome这个工作不是有2步下载。
原来JS请求创建一个iframe装载通常会已加载的PDF然而,SRC现在加载一个网页,它里面又一个iframe中,已经包含了PDF格式的URL一个src。 在HTML响应我触发onload事件,并呼吁这我的window.parent.window.handlerfunction响应这我在上面的iframe的onload本来是一个包罗万象的setTimeout功能可按。 其结果是PDF下载和处理函数是跨浏览器上运行,因为它不再依赖于检测实际IFRAME负荷的顶级父触发而是依赖于支持父/子窗口的关系。
希望这可以帮助别人谁也卡住
我有同样的问题,onLoad处理只有当火含量的变化。 如果你下载的文件。 如果删除HTTP标头的IFRAME打印文件内容,在onload是正确的火灾。
你也可以在很短的时间间隔重复检查iframe的readyState属性,直到它被完成。
function iframe_onload(iframe_id, js) {
var iframe = document.getElementById(iframe_id);
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
if (iframeDoc.readyState == 'complete') {
eval(js)
return;
}
window.setTimeout('iframe_onload("' + iframe_id + '",`' + js + '`);', 100);
}
您可能需要的jQuery这种帮助,比如你可以这样做:
$.get('http://example.com/dload.py',{},function(result){
$('alert_span').html(result);//or some content
});