如何在iframe下载文件时触发onload事件?(How to trigger onload ev

2019-07-21 02:43发布

假设我们有以下的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事件永远不会触发。

有没有什么解决方法吗? 使用内部框架是没有必要的,期望的行为是浏览器开始下载提供的文件后,推出的回调。

Answer 1:

我也遇到同样的问题,因为这样的:这是我的工作,各地,请看看它是否适合你:

<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事件再次触发。



Answer 2:

经过许多不同的方法我的解决方案,以获得跨越FF即Safari和Chrome这个工作不是有2步下载。

原来JS请求创建一个iframe装载通常会已加载的PDF然而,SRC现在加载一个网页,它里面又一个iframe中,已经包含了PDF格式的URL一个src。 在HTML响应我触发onload事件,并呼吁这我的window.parent.window.handlerfunction响应这我在上面的iframe的onload本来是一个包罗万象的setTimeout功能可按。 其结果是PDF下载和处理函数是跨浏览器上运行,因为它不再依赖于检测实际IFRAME负荷的顶级父触发而是依赖于支持父/子窗口的关系。

希望这可以帮助别人谁也卡住



Answer 3:

我有同样的问题,onLoad处理只有当火含量的变化。 如果你下载的文件。 如果删除HTTP标头的IFRAME打印文件内容,在onload是正确的火灾。



Answer 4:

你也可以在很短的时间间隔重复检查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);
}


Answer 5:

您可能需要的jQuery这种帮助,比如你可以这样做:

$.get('http://example.com/dload.py',{},function(result){
   $('alert_span').html(result);//or some content
});


文章来源: How to trigger onload event when downloading a file in an iframe?