当url生成pdf输出时,iframe onload无法正常工作

时间:2015-09-14 13:37:12

标签: javascript jquery html iframe

我有一个生成PDF文件的网址。为了生成PDF,我使用iframe来加载该URL并在用户的同一页面中生成PDF文件。

当用户点击按钮时,屏幕上会显示loader。并且当iframe加载完成时应该隐藏(当PDF下载弹出时)。我使用下面的代码,但它不起作用,loader在下载弹出窗口打开后仍然显示(如果我更改网址与google.com等任何其他网站,那么它将起作用)。

这是我的代码段。



$("#test").click(function(){
  iframe = document.getElementById("download-container1");
  if (iframe === null)
  {
    $("#ajax_loading").show();
    var url="http://test.coachfxlive.com/ajax/ajax-action.php?type=s&vid=0&playlist_id=11&perpage=1&action=get_profile";
    iframe = document.createElement('iframe');  
    iframe.id = "download-container1";
    document.body.appendChild(iframe);

    $('#download-container1').load(function () {
      $("#ajax_loading").hide();
    });
    iframe.src=url;
  }
  
});

.ajax_loading {
    background-color: rgba(0, 0, 0, 0.7);
    display: none;
    height: 100%;
    left: 0;
    position: fixed;
    top: 0;
    width: 100%;
    z-index: 99999;
}

<html>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  </head>
  <body>
    <div class="ajax_loading" id="ajax_loading"><span>Please Wait... Loading</span></div>
    <button id="test">click</button>
  </body>
</html>
&#13;
&#13;
&#13;

iframe完全加载时,需要隐藏div ajax_loading。 我在这做错什么吗?还有其他解决方案吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用readystate iframe属性来检查iframe是否已完全加载。但是,如果内容是二进制文件,则在Chrome中无效。

设置iframe网址后,它会每秒检查iframe readystate属性:

$("#test").click(function(){
 iframe = document.getElementById("download-container1");
 if (iframe === null)
 {
  $("#ajax_loading").show();
  var url="http://test.coachfxlive.com/ajax/ajax-action.php?type=s&vid=0&playlist_id=11&perpage=1&action=get_profile";
  iframe = document.createElement('iframe');  
  iframe.id = "download-container1";
  document.body.appendChild(iframe);

  //$('#download-container1').load(function () {
  //     $("#ajax_loading").hide();
  //});
  iframe.src=url;
  checkFinishedDownload(iframe);
}

 });

function checkFinishedDownload(ifr) {
     if (ifr.readyState == "complete" || ifr.readyState == "interactive") {
         // Here hide the spinner
         $("#ajax_loading").hide();
    }
     else {
        setTimeout(function () {
            checkFinishedDownload(ifr);
        }, 1000);
     }
}
 }

检查我的问题:Iframe.readyState does not work in chrome

修改 在Firefox中,您可以使用onload事件:

function checkFinishedDownload(ifr) {
     if ($.browser.mozilla) {
         ifr.onload = function () {
            $("#ajax_loading").hide();
          }

     }else{
          iframeCheck(ifr);
     }
}

function iframeCheck(iframe){
       if (iframe.readyState == "complete" || iframe.readyState == "interactive") {
         // Here hide the spinner
         $("#ajax_loading").hide();
    }
     else {
        setTimeout(function () {
            checkFinishedDownload(iframe);
        }, 1000);
     }
}